Both QEMU and bhyve are using the same function for setting up the CPU in virCapabilities, so de-duplicate it, save code and time, and help other drivers adopt it. Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> --- src/bhyve/bhyve_capabilities.c | 19 ++----------------- src/cpu/cpu.c | 13 +++++++++++++ src/cpu/cpu.h | 3 +++ src/libvirt_private.syms | 1 + src/qemu/qemu_capabilities.c | 15 +-------------- src/vmware/vmware_conf.c | 12 +++++------- 6 files changed, 25 insertions(+), 38 deletions(-) diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 4bf1d84fafc5..169f3644bcbc 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -41,21 +41,6 @@ VIR_LOG_INIT("bhyve.bhyve_capabilities"); -static int -virBhyveCapsInitCPU(virCapsPtr caps, - virArch arch) -{ - virNodeInfo nodeinfo; - - if (nodeGetInfo(&nodeinfo)) - return -1; - - if (!(caps->host.cpu = virCPUGetHost(arch, VIR_CPU_TYPE_HOST, - &nodeinfo, NULL, 0))) - return -1; - - return 0; -} virCapsPtr virBhyveCapsBuild(void) @@ -77,8 +62,8 @@ virBhyveCapsBuild(void) NULL, NULL, 0, NULL) == NULL) goto error; - if (virBhyveCapsInitCPU(caps, virArchFromHost()) < 0) - VIR_WARN("Failed to get host CPU: %s", virGetLastErrorMessage()); + if (!(caps->host.cpu = virCPUProbeHost(caps->host.arch))) + VIR_WARN("Failed to get host CPU"); return caps; diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 1461190bac2a..1bbc2b2f849e 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -26,6 +26,7 @@ #include "virlog.h" #include "viralloc.h" #include "virxml.h" +#include "nodeinfo.h" #include "cpu.h" #include "cpu_map.h" #include "cpu_x86.h" @@ -462,6 +463,18 @@ virCPUGetHost(virArch arch, } +virCPUDefPtr +virCPUProbeHost(virArch arch) +{ + virNodeInfo nodeinfo; + + if (nodeGetInfo(&nodeinfo)) + return NULL; + + return virCPUGetHost(arch, VIR_CPU_TYPE_HOST, &nodeinfo, NULL, 0); +} + + /** * cpuBaselineXML: * diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index d23409a4f068..c8e6b1846382 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -183,6 +183,9 @@ virCPUGetHost(virArch arch, const char **models, unsigned int nmodels); +virCPUDefPtr +virCPUProbeHost(virArch arch); + char * cpuBaselineXML(const char **xmlCPUs, unsigned int ncpus, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a71b56d7ba9c..7627be9956eb 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1016,6 +1016,7 @@ virCPUDataNew; virCPUDataParse; virCPUGetHost; virCPUGetModels; +virCPUProbeHost; virCPUTranslate; virCPUUpdate; virCPUUpdateLive; diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 8bd39c729b6b..8e7b20ba187c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1065,19 +1065,6 @@ virQEMUCapsInitGuestFromBinary(virCapsPtr caps, } -static virCPUDefPtr -virQEMUCapsProbeHostCPU(virCapsPtr caps) -{ - virNodeInfo nodeinfo; - - if (nodeGetInfo(&nodeinfo)) - return NULL; - - return virCPUGetHost(caps->host.arch, VIR_CPU_TYPE_HOST, - &nodeinfo, NULL, 0); -} - - virCPUDefPtr virQEMUCapsProbeHostCPUForEmulator(virCapsPtr caps, virQEMUCapsPtr qemuCaps, @@ -1140,7 +1127,7 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache) VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities"); } - if (!(caps->host.cpu = virQEMUCapsProbeHostCPU(caps))) + if (!(caps->host.cpu = virCPUProbeHost(caps->host.arch))) VIR_WARN("Failed to get host CPU"); /* Add the power management features of the host */ diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c index 659c4737a301..0c2b0f4c0be3 100644 --- a/src/vmware/vmware_conf.c +++ b/src/vmware/vmware_conf.c @@ -61,7 +61,6 @@ vmwareCapsInit(void) { virCapsPtr caps = NULL; virCapsGuestPtr guest = NULL; - virCPUDefPtr cpu = NULL; if ((caps = virCapabilitiesNew(virArchFromHost(), false, false)) == NULL) @@ -81,9 +80,9 @@ vmwareCapsInit(void) VIR_DOMAIN_VIRT_VMWARE, NULL, NULL, 0, NULL) == NULL) goto error; + guest = NULL; - if (!(cpu = virCPUGetHost(caps->host.arch, VIR_CPU_TYPE_HOST, - NULL, NULL, 0))) + if (!(caps->host.cpu = virCPUProbeHost(caps->host.arch))) goto error; /* x86_64 guests are supported if @@ -92,9 +91,9 @@ vmwareCapsInit(void) * - Host CPU is x86_64 with virtualization extensions */ if (caps->host.arch == VIR_ARCH_X86_64 || - (virCPUCheckFeature(cpu->arch, cpu, "lm") && - (virCPUCheckFeature(cpu->arch, cpu, "vmx") || - virCPUCheckFeature(cpu->arch, cpu, "svm")))) { + (virCPUCheckFeature(caps->host.cpu->arch, caps->host.cpu, "lm") && + (virCPUCheckFeature(caps->host.cpu->arch, caps->host.cpu, "vmx") || + virCPUCheckFeature(caps->host.cpu->arch, caps->host.cpu, "svm")))) { if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, @@ -109,7 +108,6 @@ vmwareCapsInit(void) } cleanup: - virCPUDefFree(cpu); return caps; error: -- 2.12.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list