render / rpms / libvirt

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