]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
cpu: Introduce virCPUCheckForbiddenFeatures
authorTim Wiederhake <twiederh@redhat.com>
Tue, 23 Mar 2021 10:01:54 +0000 (11:01 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 26 Mar 2021 10:40:52 +0000 (11:40 +0100)
Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com
src/cpu/cpu.c
src/cpu/cpu.h
src/libvirt_private.syms

index dfedf5bbf0b4f8068a1b73ed3101443511394302..3fd7035f7a734e47396dd5c2ca02ebf14e1d8474 100644 (file)
@@ -690,6 +690,43 @@ virCPUCheckFeature(virArch arch,
 }
 
 
+/**
+ * virCPUCheckForbiddenFeatures:
+ *
+ * @guest: CPU definition
+ * @host: CPU definition
+ *
+ * Checks that @host enables no feature explicitly disabled by @guest.
+ *
+ * Returns 0 on success or -1 on error.
+ */
+int
+virCPUCheckForbiddenFeatures(virCPUDefPtr guest, const virCPUDef *host)
+{
+    size_t i;
+    for (i = 0; i < guest->nfeatures; ++i) {
+        virCPUFeatureDefPtr feature;
+
+        if (guest->features[i].policy != VIR_CPU_FEATURE_FORBID)
+            continue;
+
+        feature = virCPUDefFindFeature(host, guest->features[i].name);
+        if (!feature)
+            continue;
+
+        if (feature->policy == VIR_CPU_FEATURE_DISABLE)
+            continue;
+
+        virReportError(VIR_ERR_CPU_INCOMPATIBLE,
+                       _("Host CPU provides forbidden feature '%s'"),
+                       guest->features[i].name);
+        return -1;
+    }
+
+    return 0;
+}
+
+
 /**
  * virCPUDataCheckFeature:
  *
index ff4fb7e1033afde2ff39315b9c1b84d68bb47874..0b00f0b98d921d8c9cce5c86e49577bb7f4d88e3 100644 (file)
@@ -228,6 +228,12 @@ virCPUCheckFeature(virArch arch,
     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 
 
+int
+virCPUCheckForbiddenFeatures(virCPUDefPtr guest,
+                             const virCPUDef *host)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+
+
 int
 virCPUDataCheckFeature(const virCPUData *data,
                        const char *feature)
index 6cf087f77976146f7722e15fbe717be65a821dca..cb9fe7c80a3074f7426610629dad54d8a33efcf9 100644 (file)
@@ -1421,6 +1421,7 @@ cpuEncode;
 virCPUArchIsSupported;
 virCPUBaseline;
 virCPUCheckFeature;
+virCPUCheckForbiddenFeatures;
 virCPUCompare;
 virCPUCompareXML;
 virCPUConvertLegacy;