Signed-off-by: Tim Wiederhake <twiederh(a)redhat.com>
---
src/cpu/cpu.c | 28 ++++++++++++++++++++++++++++
src/cpu/cpu.h | 9 +++++++++
src/libvirt_private.syms | 1 +
3 files changed, 38 insertions(+)
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
index b97d06c7d8..0c1c7902f0 100644
--- a/src/cpu/cpu.c
+++ b/src/cpu/cpu.c
@@ -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:
*
diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h
index a67af61757..7ecb0d6921 100644
--- a/src/cpu/cpu.h
+++ b/src/cpu/cpu.h
@@ -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);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 21a723035d..3b6645b4a8 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1460,6 +1460,7 @@ virCPUDataAddFeature;
virCPUDataCheckFeature;
virCPUDataFormat;
virCPUDataFree;
+virCPUDataIsIdentical;
virCPUDataNew;
virCPUDataParse;
virCPUDataParseNode;
--
2.31.1