From: Daniel P. Berrangé Date: Fri, 29 Nov 2019 14:04:01 +0000 (+0000) Subject: qemu: directly create virResctrlInfo ignoring capabilities X-Git-Tag: v6.0.0-rc1~436 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7be5fe66cd024b9ffba7c52cdbf5effedeac2c0d;p=thirdparty%2Flibvirt.git qemu: directly create virResctrlInfo ignoring capabilities We always refresh the capabilities object when using virResctrlInfo during process startup. This is undesirable overhead, because we can just directly create a virResctrlInfo instead. Reviewed-by: Michal Privoznik Signed-off-by: Daniel P. Berrangé --- diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3325a1c47f..31877d6576 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2724,29 +2724,24 @@ qemuProcessSetupEmulator(virDomainObjPtr vm) static int -qemuProcessResctrlCreate(virQEMUDriverPtr driver, - virDomainObjPtr vm) +qemuProcessResctrlCreate(virDomainObjPtr vm) { - int ret = -1; size_t i = 0; - virCapsPtr caps = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; + g_autoptr(virResctrlInfo) resctrl = NULL; if (!vm->def->nresctrls) return 0; - /* Force capability refresh since resctrl info can change - * XXX: move cache info into virresctrl so caps are not needed */ - caps = virQEMUDriverGetCapabilities(driver, true); - if (!caps) + if (!(resctrl = virResctrlInfoNew())) return -1; for (i = 0; i < vm->def->nresctrls; i++) { size_t j = 0; - if (virResctrlAllocCreate(caps->host.resctrl, + if (virResctrlAllocCreate(resctrl, vm->def->resctrls[i]->alloc, priv->machineName) < 0) - goto cleanup; + return -1; for (j = 0; j < vm->def->resctrls[i]->nmonitors; j++) { virDomainResctrlMonDefPtr mon = NULL; @@ -2754,14 +2749,11 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver, mon = vm->def->resctrls[i]->monitors[j]; if (virResctrlMonitorCreate(mon->instance, priv->machineName) < 0) - goto cleanup; + return -1; } } - ret = 0; - cleanup: - virObjectUnref(caps); - return ret; + return 0; } @@ -6882,7 +6874,7 @@ qemuProcessLaunch(virConnectPtr conn, goto cleanup; VIR_DEBUG("Setting up resctrl"); - if (qemuProcessResctrlCreate(driver, vm) < 0) + if (qemuProcessResctrlCreate(vm) < 0) goto cleanup; VIR_DEBUG("Setting up managed PR daemon"); diff --git a/src/util/virresctrl.h b/src/util/virresctrl.h index 3dd7c96348..759320d0fd 100644 --- a/src/util/virresctrl.h +++ b/src/util/virresctrl.h @@ -100,6 +100,8 @@ typedef virResctrlInfo *virResctrlInfoPtr; virResctrlInfoPtr virResctrlInfoNew(void); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virResctrlInfo, virObjectUnref); + int virResctrlInfoGetCache(virResctrlInfoPtr resctrl, unsigned int level,