[PATCH 04/24] qemu: Filter CPU features in active XML

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Properly filter features which should not be passed to QEMU because they
were never supported by QEMU or they did nothing and QEMU dropped them.

Currently they are just silently ignored by the command line generator.
Let's make this process more visible and clean by dropping the features
from the domain's active definition in qemuProcessUpdateGuestCPU.

Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx>
---
 src/qemu/qemu_command.c |  3 ---
 src/qemu/qemu_process.c | 38 +++++++++++++++++++++-----------------
 2 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 6cc165a118..a23e428322 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7106,9 +7106,6 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
         virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id);
 
     for (i = 0; i < cpu->nfeatures; i++) {
-        if (!virQEMUCapsCPUFilterFeatures(cpu->features[i].name,
-                                          (virArch *)&def->os.arch))
-            continue;
         switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
         case VIR_CPU_FEATURE_FORCE:
         case VIR_CPU_FEATURE_REQUIRE:
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 144328c148..47e84e5ef0 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -5928,26 +5928,30 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
         return -1;
 
     /* nothing to update for host-passthrough */
-    if (def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH)
-        return 0;
+    if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) {
+        if (def->cpu->check == VIR_CPU_CHECK_PARTIAL &&
+            virCPUCompare(caps->host.arch,
+                          virQEMUCapsGetHostModel(qemuCaps, def->virtType,
+                                                  VIR_QEMU_CAPS_HOST_CPU_FULL),
+                          def->cpu, true) < 0)
+            return -1;
 
-    if (def->cpu->check == VIR_CPU_CHECK_PARTIAL &&
-        virCPUCompare(caps->host.arch,
-                      virQEMUCapsGetHostModel(qemuCaps, def->virtType,
-                                              VIR_QEMU_CAPS_HOST_CPU_FULL),
-                      def->cpu, true) < 0)
+        if (virCPUUpdate(def->os.arch, def->cpu,
+                         virQEMUCapsGetHostModel(qemuCaps, def->virtType,
+                                                 VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0)
+            return -1;
+
+        if (virCPUTranslate(def->os.arch, def->cpu,
+                            virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType)) < 0)
+            return -1;
+
+        def->cpu->fallback = VIR_CPU_FALLBACK_FORBID;
+    }
+
+    if (virCPUDefFilterFeatures(def->cpu, virQEMUCapsCPUFilterFeatures,
+                                &def->os.arch) < 0)
         return -1;
 
-    if (virCPUUpdate(def->os.arch, def->cpu,
-                     virQEMUCapsGetHostModel(qemuCaps, def->virtType,
-                                             VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0)
-        return -1;
-
-    if (virCPUTranslate(def->os.arch, def->cpu,
-                        virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType)) < 0)
-        return -1;
-
-    def->cpu->fallback = VIR_CPU_FALLBACK_FORBID;
     return 0;
 }
 
-- 
2.22.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux