From: Jiri Denemark <jdene...@redhat.com>

Signed-off-by: Jiri Denemark <jdene...@redhat.com>
---
 src/qemu/qemu_driver.c | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2c06e50454..cf7407ce2d 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11970,13 +11970,20 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn,
     size_t i;
 
     virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES |
-                  VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL);
+                  VIR_CONNECT_BASELINE_CPU_MIGRATABLE |
+                  VIR_CONNECT_BASELINE_CPU_IGNORE_HOST, NULL);
 
     if (virConnectBaselineHypervisorCPUEnsureACL(conn) < 0)
         goto cleanup;
 
     migratable = !!(flags & VIR_CONNECT_BASELINE_CPU_MIGRATABLE);
 
+    if ((flags & VIR_CONNECT_BASELINE_CPU_IGNORE_HOST) && ncpus < 2) {
+        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                       _("ignoring host is only allowed when computing 
baseline from multiple CPUs"));
+        goto cleanup;
+    }
+
     if (!(cpus = virCPUDefListParse(xmlCPUs, ncpus, VIR_CPU_TYPE_AUTO)))
         goto cleanup;
 
@@ -11999,14 +12006,19 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn,
     }
 
     if (ARCH_IS_X86(arch)) {
-        int rc = virQEMUCapsGetCPUFeatures(qemuCaps, virttype,
-                                           migratable, &features);
-        if (rc < 0)
-            goto cleanup;
-        if (features && rc == 0) {
-            /* We got only migratable features from QEMU if we asked for them,
-             * no further filtering in virCPUBaseline is desired. */
-            migratable = false;
+        if (flags & VIR_CONNECT_BASELINE_CPU_IGNORE_HOST) {
+            VIR_DEBUG("Not adding host's features as 
VIR_CONNECT_BASELINE_CPU_IGNORE_HOST was set");
+            g_clear_pointer(&cpuModels, virObjectUnref);
+        } else {
+            int rc = virQEMUCapsGetCPUFeatures(qemuCaps, virttype,
+                                               migratable, &features);
+            if (rc < 0)
+                goto cleanup;
+            if (features && rc == 0) {
+                /* We got only migratable features from QEMU if we asked for 
them,
+                 * no further filtering in virCPUBaseline is desired. */
+                migratable = false;
+            }
         }
 
         if (!(cpu = virCPUBaseline(arch, cpus, ncpus, cpuModels,
-- 
2.50.0

Reply via email to