3e5111
From aadb80300ceec4ccded4a31992af12abde3860b5 Mon Sep 17 00:00:00 2001
3e5111
Message-Id: <aadb80300ceec4ccded4a31992af12abde3860b5@dist-git>
3e5111
From: Jiri Denemark <jdenemar@redhat.com>
3e5111
Date: Tue, 11 Apr 2017 11:14:30 +0200
3e5111
Subject: [PATCH] qemu: Prepare qemuCaps for multiple host CPU defs
3e5111
3e5111
Soon we will need to store multiple host CPU definitions in
3e5111
virQEMUCapsHostCPUData and qemuCaps users will want to request the one
3e5111
they need. This patch introduces virQEMUCapsHostCPUType enum which will
3e5111
be used for specifying the requested CPU definition.
3e5111
3e5111
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
3e5111
(cherry picked from commit 1fe517c68df92eb7f379fa87cb0d29d566aad6f4)
3e5111
3e5111
https://bugzilla.redhat.com/show_bug.cgi?id=1444421
3e5111
3e5111
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
3e5111
---
3e5111
 src/qemu/qemu_capabilities.c | 16 ++++++++++++----
3e5111
 src/qemu/qemu_capabilities.h | 10 +++++++++-
3e5111
 src/qemu/qemu_command.c      |  3 ++-
3e5111
 src/qemu/qemu_process.c      |  6 ++++--
3e5111
 4 files changed, 27 insertions(+), 8 deletions(-)
3e5111
3e5111
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
3e5111
index 0db149018..e84de9f5b 100644
3e5111
--- a/src/qemu/qemu_capabilities.c
3e5111
+++ b/src/qemu/qemu_capabilities.c
3e5111
@@ -2445,11 +2445,17 @@ virQEMUCapsGetHostCPUData(virQEMUCapsPtr qemuCaps,
3e5111
 
3e5111
 virCPUDefPtr
3e5111
 virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps,
3e5111
-                        virDomainVirtType type)
3e5111
+                        virDomainVirtType type,
3e5111
+                        virQEMUCapsHostCPUType cpuType)
3e5111
 {
3e5111
     virQEMUCapsHostCPUDataPtr cpuData = virQEMUCapsGetHostCPUData(qemuCaps, type);
3e5111
 
3e5111
-    return cpuData->reported;
3e5111
+    switch (cpuType) {
3e5111
+    case VIR_QEMU_CAPS_HOST_CPU_REPORTED:
3e5111
+        return cpuData->reported;
3e5111
+    }
3e5111
+
3e5111
+    return NULL;
3e5111
 }
3e5111
 
3e5111
 
3e5111
@@ -2478,7 +2484,8 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
3e5111
                virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch);
3e5111
 
3e5111
     case VIR_CPU_MODE_HOST_MODEL:
3e5111
-        return !!virQEMUCapsGetHostModel(qemuCaps, type);
3e5111
+        return !!virQEMUCapsGetHostModel(qemuCaps, type,
3e5111
+                                         VIR_QEMU_CAPS_HOST_CPU_REPORTED);
3e5111
 
3e5111
     case VIR_CPU_MODE_CUSTOM:
3e5111
         if (type == VIR_DOMAIN_VIRT_KVM)
3e5111
@@ -5499,7 +5506,8 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
3e5111
 
3e5111
     if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype,
3e5111
                                       VIR_CPU_MODE_HOST_MODEL)) {
3e5111
-        virCPUDefPtr cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype);
3e5111
+        virCPUDefPtr cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype,
3e5111
+                                                   VIR_QEMU_CAPS_HOST_CPU_REPORTED);
3e5111
         domCaps->cpu.hostModel = virCPUDefCopy(cpu);
3e5111
     }
3e5111
 
3e5111
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
3e5111
index c466a63e7..50333fc26 100644
3e5111
--- a/src/qemu/qemu_capabilities.h
3e5111
+++ b/src/qemu/qemu_capabilities.h
3e5111
@@ -450,8 +450,16 @@ int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
3e5111
                                  virDomainVirtType type,
3e5111
                                  char ***names,
3e5111
                                  size_t *count);
3e5111
+
3e5111
+typedef enum {
3e5111
+    /* Host CPU definition reported in domain capabilities. */
3e5111
+    VIR_QEMU_CAPS_HOST_CPU_REPORTED,
3e5111
+} virQEMUCapsHostCPUType;
3e5111
+
3e5111
 virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps,
3e5111
-                                     virDomainVirtType type);
3e5111
+                                     virDomainVirtType type,
3e5111
+                                     virQEMUCapsHostCPUType cpuType);
3e5111
+
3e5111
 bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
3e5111
                                    virCapsPtr caps,
3e5111
                                    virDomainVirtType type,
3e5111
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
3e5111
index 2105cde58..9ce90c25b 100644
3e5111
--- a/src/qemu/qemu_command.c
3e5111
+++ b/src/qemu/qemu_command.c
3e5111
@@ -6908,7 +6908,8 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
3e5111
             if (def->cpu->mode == VIR_CPU_MODE_CUSTOM)
3e5111
                 cpuDef = def->cpu;
3e5111
             else if (def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH)
3e5111
-                cpuDef = virQEMUCapsGetHostModel(qemuCaps, def->virtType);
3e5111
+                cpuDef = virQEMUCapsGetHostModel(qemuCaps, def->virtType,
3e5111
+                                                 VIR_QEMU_CAPS_HOST_CPU_REPORTED);
3e5111
 
3e5111
             if (cpuDef) {
3e5111
                 int svm = virCPUCheckFeature(def->os.arch, cpuDef, "svm");
3e5111
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
3e5111
index afd9dfb71..dc073891a 100644
3e5111
--- a/src/qemu/qemu_process.c
3e5111
+++ b/src/qemu/qemu_process.c
3e5111
@@ -5306,12 +5306,14 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
3e5111
 
3e5111
     if (def->cpu->check == VIR_CPU_CHECK_PARTIAL &&
3e5111
         virCPUCompare(caps->host.arch,
3e5111
-                      virQEMUCapsGetHostModel(qemuCaps, def->virtType),
3e5111
+                      virQEMUCapsGetHostModel(qemuCaps, def->virtType,
3e5111
+                                              VIR_QEMU_CAPS_HOST_CPU_REPORTED),
3e5111
                       def->cpu, true) < 0)
3e5111
         return -1;
3e5111
 
3e5111
     if (virCPUUpdate(def->os.arch, def->cpu,
3e5111
-                     virQEMUCapsGetHostModel(qemuCaps, def->virtType)) < 0)
3e5111
+                     virQEMUCapsGetHostModel(qemuCaps, def->virtType,
3e5111
+                                             VIR_QEMU_CAPS_HOST_CPU_REPORTED)) < 0)
3e5111
         goto cleanup;
3e5111
 
3e5111
     if (virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType,
3e5111
-- 
3e5111
2.12.2
3e5111