[libvirt] [PATCH v4 33/37] qemu_driver: Identify using libvirt as a distinct way to compute baseline

Chris Venteicher cventeic at redhat.com
Sat Nov 3 03:13:34 UTC 2018


Hypervisor baseline cpu can be computed locally using libvirt utility
functions or remotely using QEMU QMP commands.

Likewise, cpu feature expansion can be computed locally using libvirt
utility functions or remotely using QEMU QMP commands.

This patch identifies using libvirt as a distinct case in the hypervisor
baseline logic and triggers that case when the X86 architecture is being
baselined.

There is one functionality change introduced by this patch.

Local libvirt functions are only used for feature expansion when the
local utility functions are used for CPU baseline and an error is
generated when no method is available to expand cpu featues.

The useQEMU option will be introduced in a future patch for using QEMU
to compute baseline rather than using libvirt.

Signed-off-by: Chris Venteicher <cventeic at redhat.com>
---
 src/qemu/qemu_driver.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 54f7b8b26d..632b756c89 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -13477,6 +13477,7 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn,
     bool migratable;
     virCPUDefPtr cpu = NULL;
     char *cpustr = NULL;
+    bool useLibvirt = false;
 
     virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES |
                   VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL);
@@ -13496,7 +13497,9 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn,
     if (!qemuCaps)
         goto cleanup;
 
-    if (ARCH_IS_X86(arch)) {
+    useLibvirt = ARCH_IS_X86(arch);
+
+    if (useLibvirt) {
         migratable = !!(flags & VIR_CONNECT_BASELINE_CPU_MIGRATABLE);
 
         if (qemuConnectBaselineHypervisorCPUViaLibvirt(qemuCaps, migratable,
@@ -13512,9 +13515,17 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn,
 
     cpu->fallback = VIR_CPU_FALLBACK_FORBID;
 
-    if ((flags & VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES) &&
-        virCPUExpandFeatures(arch, cpu) < 0)
-        goto cleanup;
+    if (flags & VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES) {
+        if (useLibvirt && virCPUExpandFeatures(arch, cpu) < 0) {
+            goto cleanup;
+        } else {
+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+                           _("expand features while "
+                             "computing baseline hypervisor CPU is not supported "
+                             "for arch %s"), virArchToString(arch));
+            goto cleanup;
+        }
+    }
 
     cpustr = virCPUDefFormat(cpu, NULL);
 
-- 
2.17.1




More information about the libvir-list mailing list