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

Ján Tomko jtomko at redhat.com
Wed Jun 19 11:39:46 UTC 2019


On Wed, Jun 19, 2019 at 11:38:01AM +0200, Jiri Denemark wrote:
>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 at redhat.com>
>---
> 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;
>+    }
>+

Splitting the condition inversion and resulting indentation change would make this patch nicer.

Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190619/af28c2bc/attachment-0001.sig>


More information about the libvir-list mailing list