}
+/**
+ * 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:
*
(*virCPUArchDataAddFeature)(virCPUData *cpuData,
const char *name);
+typedef virCPUCompareResult
+(*virCPUArchDataIsIdentical)(const virCPUData *a,
+ const virCPUData *b);
+
struct cpuArchDriver {
const char *name;
const virArch *arch;
virCPUArchCopyMigratable copyMigratable;
virCPUArchValidateFeatures validateFeatures;
virCPUArchDataAddFeature dataAddFeature;
+ virCPUArchDataIsIdentical dataIsIdentical;
};
virCPUDataAddFeature(virCPUData *cpuData,
const char *name);
+virCPUCompareResult
+virCPUDataIsIdentical(const virCPUData *a,
+ const virCPUData *b);
+
bool
virCPUArchIsSupported(virArch arch);