summaryrefslogtreecommitdiff
path: root/src/libvirt-host.c
diff options
context:
space:
mode:
authorJiri Denemark <jdenemar@redhat.com>2018-04-24 21:31:33 +0200
committerJiri Denemark <jdenemar@redhat.com>2018-05-28 15:55:17 +0200
commit24a41aa6435045df2cf711d34cf399c2d74e4bf2 (patch)
treee1030218f9fcdc0a82102257fb9a556ed9ff02c4 /src/libvirt-host.c
parentda3bfc9ffc11292b46d19d3527087c3b68785fd6 (diff)
downloadlibvirt-24a41aa6435045df2cf711d34cf399c2d74e4bf2.tar.gz
Introduce virConnectCompareHypervisorCPU public API
This new API compares the given CPU description with the CPU the specified hypervisor is able to provide on the host. It is a more useful version of virConnectCompareCPU, which compares the CPU definition with the host CPU without considering any specific hypervisor and its abilities. https://bugzilla.redhat.com/show_bug.cgi?id=1559832 https://bugzilla.redhat.com/show_bug.cgi?id=1559835 Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Collin Walling <walling@linux.ibm.com>
Diffstat (limited to 'src/libvirt-host.c')
-rw-r--r--src/libvirt-host.c72
1 files changed, 71 insertions, 1 deletions
diff --git a/src/libvirt-host.c b/src/libvirt-host.c
index 9cd7fa4425..1ee753e10f 100644
--- a/src/libvirt-host.c
+++ b/src/libvirt-host.c
@@ -954,7 +954,11 @@ virConnectIsSecure(virConnectPtr conn)
* @xmlDesc: XML describing the CPU to compare with host CPU
* @flags: bitwise-OR of virConnectCompareCPUFlags
*
- * Compares the given CPU description with the host CPU
+ * Compares the given CPU description with the host CPU.
+ *
+ * See virConnectCompareHypervisorCPU() if you want to consider hypervisor
+ * abilities and compare the CPU to the CPU which a hypervisor is able to
+ * provide on the host.
*
* Returns comparison result according to enum virCPUCompareResult. If
* VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE is used and @xmlDesc CPU is
@@ -993,6 +997,72 @@ virConnectCompareCPU(virConnectPtr conn,
/**
+ * virConnectCompareHypervisorCPU:
+ * @conn: pointer to the hypervisor connection
+ * @emulator: path to the emulator binary
+ * @arch: CPU architecture
+ * @machine: machine type
+ * @virttype: virtualization type
+ * @xmlCPU: XML describing the CPU to be compared
+ * @flags: bitwise-OR of virConnectCompareCPUFlags
+ *
+ * Compares the given CPU description with the CPU the specified hypervisor is
+ * able to provide on the host. Any of @emulator, @arch, @machine, and
+ * @virttype parameters may be NULL; libvirt will choose sensible defaults
+ * tailored to the host and its current configuration.
+ *
+ * This is different from virConnectCompareCPU() which compares the CPU
+ * definition with the host CPU without considering any specific hypervisor and
+ * its abilities.
+ *
+ * Returns comparison result according to enum virCPUCompareResult. If
+ * VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE is used and @xmlCPU is
+ * incompatible with the CPU the specified hypervisor is able to provide on the
+ * host, this function will return VIR_CPU_COMPARE_ERROR (instead of
+ * VIR_CPU_COMPARE_INCOMPATIBLE) and the error will use the
+ * VIR_ERR_CPU_INCOMPATIBLE code with a message providing more details about
+ * the incompatibility.
+ */
+int
+virConnectCompareHypervisorCPU(virConnectPtr conn,
+ const char *emulator,
+ const char *arch,
+ const char *machine,
+ const char *virttype,
+ const char *xmlCPU,
+ unsigned int flags)
+{
+ VIR_DEBUG("conn=%p, emulator=%s, arch=%s, machine=%s, "
+ "virttype=%s, xmlCPU=%s, flags=0x%x",
+ conn, NULLSTR(emulator), NULLSTR(arch), NULLSTR(machine),
+ NULLSTR(virttype), NULLSTR(xmlCPU), flags);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, VIR_CPU_COMPARE_ERROR);
+ virCheckNonNullArgGoto(xmlCPU, error);
+
+ if (conn->driver->connectCompareHypervisorCPU) {
+ int ret;
+
+ ret = conn->driver->connectCompareHypervisorCPU(conn, emulator, arch,
+ machine, virttype,
+ xmlCPU, flags);
+ if (ret == VIR_CPU_COMPARE_ERROR)
+ goto error;
+
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return VIR_CPU_COMPARE_ERROR;
+}
+
+
+/**
* virConnectGetCPUModelNames:
*
* @conn: virConnect connection