From: Jiri Denemark Date: Mon, 17 Jun 2019 21:38:46 +0000 (+0200) Subject: qemu_process: Prefer generic qemuMonitorGetGuestCPU X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=63acb7bfd56f117309e4fcaf438639d4d7bc7dcb;p=libvirt.git qemu_process: Prefer generic qemuMonitorGetGuestCPU When updating guest CPU definition according to the vCPU actually created by QEMU, we want to use the generic qemuMonitorGetGuestCPU to get both CPUID and MSR features. Signed-off-by: Jiri Denemark Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index db940b02a8..fa82adbc1e 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4128,6 +4128,16 @@ qemuProcessVerifyCPUFeatures(virDomainDefPtr def, } +static const char * +qemuProcessTranslateCPUFeatures(const char *name, + void *opaque) +{ + virQEMUCapsPtr qemuCaps = opaque; + + return virQEMUCapsCPUFeatureFromQEMU(qemuCaps, name); +} + + static int qemuProcessFetchGuestCPU(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -4138,18 +4148,28 @@ qemuProcessFetchGuestCPU(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv = vm->privateData; virCPUDataPtr dataEnabled = NULL; virCPUDataPtr dataDisabled = NULL; + bool generic; int rc; *enabled = NULL; *disabled = NULL; - if (!ARCH_IS_X86(vm->def->os.arch)) + generic = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CPU_UNAVAILABLE_FEATURES); + + if (!generic && !ARCH_IS_X86(vm->def->os.arch)) return 0; if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto error; - rc = qemuMonitorGetGuestCPUx86(priv->mon, &dataEnabled, &dataDisabled); + if (generic) { + rc = qemuMonitorGetGuestCPU(priv->mon, + vm->def->os.arch, + qemuProcessTranslateCPUFeatures, priv->qemuCaps, + &dataEnabled, &dataDisabled); + } else { + rc = qemuMonitorGetGuestCPUx86(priv->mon, &dataEnabled, &dataDisabled); + } if (qemuDomainObjExitMonitor(driver, vm) < 0) goto error;