mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
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>
This commit is contained in:
parent
da3bfc9ffc
commit
24a41aa643
@ -640,6 +640,13 @@ typedef enum {
|
|||||||
int virConnectCompareCPU(virConnectPtr conn,
|
int virConnectCompareCPU(virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
int virConnectCompareHypervisorCPU(virConnectPtr conn,
|
||||||
|
const char *emulator,
|
||||||
|
const char *arch,
|
||||||
|
const char *machine,
|
||||||
|
const char *virttype,
|
||||||
|
const char *xmlCPU,
|
||||||
|
unsigned int flags);
|
||||||
|
|
||||||
int virConnectGetCPUModelNames(virConnectPtr conn,
|
int virConnectGetCPUModelNames(virConnectPtr conn,
|
||||||
const char *arch,
|
const char *arch,
|
||||||
|
@ -678,6 +678,15 @@ typedef int
|
|||||||
const char *cpu,
|
const char *cpu,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
|
typedef int
|
||||||
|
(*virDrvConnectCompareHypervisorCPU)(virConnectPtr conn,
|
||||||
|
const char *emulator,
|
||||||
|
const char *arch,
|
||||||
|
const char *machine,
|
||||||
|
const char *virttype,
|
||||||
|
const char *xmlCPU,
|
||||||
|
unsigned int flags);
|
||||||
|
|
||||||
typedef char *
|
typedef char *
|
||||||
(*virDrvConnectBaselineCPU)(virConnectPtr conn,
|
(*virDrvConnectBaselineCPU)(virConnectPtr conn,
|
||||||
const char **xmlCPUs,
|
const char **xmlCPUs,
|
||||||
@ -1538,6 +1547,7 @@ struct _virHypervisorDriver {
|
|||||||
virDrvDomainSetVcpu domainSetVcpu;
|
virDrvDomainSetVcpu domainSetVcpu;
|
||||||
virDrvDomainSetBlockThreshold domainSetBlockThreshold;
|
virDrvDomainSetBlockThreshold domainSetBlockThreshold;
|
||||||
virDrvDomainSetLifecycleAction domainSetLifecycleAction;
|
virDrvDomainSetLifecycleAction domainSetLifecycleAction;
|
||||||
|
virDrvConnectCompareHypervisorCPU connectCompareHypervisorCPU;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -954,7 +954,11 @@ virConnectIsSecure(virConnectPtr conn)
|
|||||||
* @xmlDesc: XML describing the CPU to compare with host CPU
|
* @xmlDesc: XML describing the CPU to compare with host CPU
|
||||||
* @flags: bitwise-OR of virConnectCompareCPUFlags
|
* @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
|
* Returns comparison result according to enum virCPUCompareResult. If
|
||||||
* VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE is used and @xmlDesc CPU is
|
* VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE is used and @xmlDesc CPU is
|
||||||
@ -992,6 +996,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:
|
* virConnectGetCPUModelNames:
|
||||||
*
|
*
|
||||||
|
@ -788,6 +788,7 @@ LIBVIRT_4.1.0 {
|
|||||||
LIBVIRT_4.4.0 {
|
LIBVIRT_4.4.0 {
|
||||||
global:
|
global:
|
||||||
virDomainDetachDeviceAlias;
|
virDomainDetachDeviceAlias;
|
||||||
|
virConnectCompareHypervisorCPU;
|
||||||
} LIBVIRT_4.1.0;
|
} LIBVIRT_4.1.0;
|
||||||
|
|
||||||
# .... define new API here using predicted next version number ....
|
# .... define new API here using predicted next version number ....
|
||||||
|
Loading…
Reference in New Issue
Block a user