]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
cpu: Add virCPUDataIsIdentical
authorTim Wiederhake <twiederh@redhat.com>
Wed, 6 Oct 2021 12:53:05 +0000 (14:53 +0200)
committerTim Wiederhake <twiederh@redhat.com>
Fri, 5 Nov 2021 16:12:25 +0000 (17:12 +0100)
Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/cpu/cpu.c
src/cpu/cpu.h
src/libvirt_private.syms

index b97d06c7d8069dd8dd9ef2bc06bb5415b369d6db..0c1c7902f04e2fcfba720e79ccfd9399536f8f54 100644 (file)
@@ -1141,6 +1141,34 @@ virCPUDataAddFeature(virCPUData *cpuData,
 }
 
 
+/**
+ * virCPUDataIsIdentical:
+ *
+ * Returns VIR_CPU_COMPARE_IDENTICAL if @a and @b are identical,
+ * VIR_CPU_COMPARE_INCOMPATIBLE if @a and @b are not identical, or
+ * VIR_CPU_COMPARE_ERROR on error.
+ */
+virCPUCompareResult
+virCPUDataIsIdentical(const virCPUData *a,
+                      const virCPUData *b)
+{
+    struct cpuArchDriver *driver;
+
+    VIR_DEBUG("a=%p, b=%p", a, b);
+
+    if (!a || !b)
+        return VIR_CPU_COMPARE_ERROR;
+
+    if (!(driver = cpuGetSubDriver(a->arch)))
+        return VIR_CPU_COMPARE_ERROR;
+
+    if (!driver->dataIsIdentical)
+        return VIR_CPU_COMPARE_ERROR;
+
+    return driver->dataIsIdentical(a, b);
+}
+
+
 /**
  * virCPUArchIsSupported:
  *
index a67af617578fba3913406834cebd041cbfdf3e15..7ecb0d6921e852c7a9e830a60f7ea6e072a180c8 100644 (file)
@@ -123,6 +123,10 @@ typedef int
 (*virCPUArchDataAddFeature)(virCPUData *cpuData,
                             const char *name);
 
+typedef virCPUCompareResult
+(*virCPUArchDataIsIdentical)(const virCPUData *a,
+                             const virCPUData *b);
+
 struct cpuArchDriver {
     const char *name;
     const virArch *arch;
@@ -146,6 +150,7 @@ struct cpuArchDriver {
     virCPUArchCopyMigratable copyMigratable;
     virCPUArchValidateFeatures validateFeatures;
     virCPUArchDataAddFeature dataAddFeature;
+    virCPUArchDataIsIdentical dataIsIdentical;
 };
 
 
@@ -275,6 +280,10 @@ int
 virCPUDataAddFeature(virCPUData *cpuData,
                      const char *name);
 
+virCPUCompareResult
+virCPUDataIsIdentical(const virCPUData *a,
+                      const virCPUData *b);
+
 bool
 virCPUArchIsSupported(virArch arch);
 
index 42060caae8af479bc38f90166163ead14ddfba8d..d985ff77a1901aa0b9d206662feb3dafb5315f9b 100644 (file)
@@ -1462,6 +1462,7 @@ virCPUDataAddFeature;
 virCPUDataCheckFeature;
 virCPUDataFormat;
 virCPUDataFree;
+virCPUDataIsIdentical;
 virCPUDataNew;
 virCPUDataParse;
 virCPUDataParseNode;