From: Jiri Denemark <[email protected]>

The only thing that can fail inside virCPUDefFilterFeatures is
VIR_DELETE_ELEMENT_INPLACE macro. The macro just calls
virDeleteElementsN, which reports a warning when all elements to be
removed are not within the array bounds and returns -1. The function
succeeds otherwise. But since VIR_DELETE_ELEMENT_INPLACE sets the number
of elements to be removed to 1 and we call it with i < cpu->nfeatures,
the safety check in virDeleteElementsN will never fail. And even if we
theoretically called it with wrong arguments, it just wouldn't do
anything.

Thus we can safely assume VIR_DELETE_ELEMENT_INPLACE always succeeds in
virCPUDefFilterFeatures and avoid reporting any errors to simplify
callers.

Signed-off-by: Jiri Denemark <[email protected]>
---
 src/conf/cpu_conf.c          |  9 ++++-----
 src/conf/cpu_conf.h          |  2 +-
 src/qemu/qemu_capabilities.c | 15 ++++++---------
 src/qemu/qemu_domain.c       |  3 +--
 src/qemu/qemu_process.c      |  5 ++---
 5 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index 31425783ba..7aeedf64f5 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -1017,7 +1017,7 @@ virCPUDefListExplicitFeatures(const virCPUDef *def)
 }
 
 
-int
+void
 virCPUDefFilterFeatures(virCPUDef *cpu,
                         virCPUDefFeatureFilter filter,
                         void *opaque)
@@ -1031,11 +1031,10 @@ virCPUDefFilterFeatures(virCPUDef *cpu,
         }
 
         VIR_FREE(cpu->features[i].name);
-        if (VIR_DELETE_ELEMENT_INPLACE(cpu->features, i, cpu->nfeatures) < 0)
-            return -1;
-    }
 
-    return 0;
+        /* Safe to ignore as an error is returned only for invalid arguments */
+        ignore_value(VIR_DELETE_ELEMENT_INPLACE(cpu->features, i, 
cpu->nfeatures));
+    }
 }
 
 
diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
index 28e26303ef..cfb8f1a461 100644
--- a/src/conf/cpu_conf.h
+++ b/src/conf/cpu_conf.h
@@ -260,7 +260,7 @@ virCPUFeatureDef *
 virCPUDefFindFeature(const virCPUDef *def,
                      const char *name);
 
-int
+void
 virCPUDefFilterFeatures(virCPUDef *cpu,
                         virCPUDefFeatureFilter filter,
                         void *opaque);
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 83946123be..2c966e7ef0 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4023,17 +4023,14 @@ virQEMUCapsInitHostCPUModel(virQEMUCaps *qemuCaps,
 
     if (ARCH_IS_X86(qemuCaps->arch) &&
         !virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_UNAVAILABLE_FEATURES)) {
-        if (cpu &&
-            virCPUDefFilterFeatures(cpu, virCPUx86FeatureFilterDropMSR, NULL) 
< 0)
-            goto error;
+        if (cpu)
+            virCPUDefFilterFeatures(cpu, virCPUx86FeatureFilterDropMSR, NULL);
 
-        if (migCPU &&
-            virCPUDefFilterFeatures(migCPU, virCPUx86FeatureFilterDropMSR, 
NULL) < 0)
-            goto error;
+        if (migCPU)
+            virCPUDefFilterFeatures(migCPU, virCPUx86FeatureFilterDropMSR, 
NULL);
 
-        if (fullCPU &&
-            virCPUDefFilterFeatures(fullCPU, virCPUx86FeatureFilterDropMSR, 
NULL) < 0)
-            goto error;
+        if (fullCPU)
+            virCPUDefFilterFeatures(fullCPU, virCPUx86FeatureFilterDropMSR, 
NULL);
     }
 
     if (virQEMUCapsTypeIsAccelerated(type))
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 375e0e441a..227eee3646 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -5319,8 +5319,7 @@ qemuDomainMakeCPUMigratable(virArch arch,
             g_auto(GStrv) keep = virCPUDefListExplicitFeatures(origCPU);
             data.keep = keep;
 
-            if (virCPUDefFilterFeatures(cpu, qemuDomainDropAddedCPUFeatures, 
&data) < 0)
-                return -1;
+            virCPUDefFilterFeatures(cpu, qemuDomainDropAddedCPUFeatures, 
&data);
         }
     }
 
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 9926998f85..17eac5772b 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -6552,9 +6552,8 @@ qemuProcessUpdateGuestCPU(virDomainDef *def,
         def->cpu->fallback = VIR_CPU_FALLBACK_FORBID;
     }
 
-    if (virCPUDefFilterFeatures(def->cpu, virQEMUCapsCPUFilterFeatures,
-                                &def->os.arch) < 0)
-        return -1;
+    virCPUDefFilterFeatures(def->cpu, virQEMUCapsCPUFilterFeatures,
+                            &def->os.arch);
 
     if (def->cpu->deprecated_feats) {
         virCPUFeaturePolicy policy = VIR_CPU_FEATURE_REQUIRE;
-- 
2.51.0

Reply via email to