
On Tue, Jun 28, 2022 at 06:09:43PM +0200, Tim Wiederhake wrote:
Signed-off-by: Tim Wiederhake <twiederh@redhat.com> --- include/libvirt/libvirt-host.h | 7 +++++ src/driver-hypervisor.h | 9 ++++++ src/libvirt-host.c | 54 ++++++++++++++++++++++++++++++++++ src/libvirt_public.syms | 1 + 4 files changed, 71 insertions(+)
diff --git a/include/libvirt/libvirt-host.h b/include/libvirt/libvirt-host.h index 5aaa001adb..ad11c1172d 100644 --- a/include/libvirt/libvirt-host.h +++ b/include/libvirt/libvirt-host.h @@ -968,6 +968,13 @@ int virConnectGetHypervisorCPUModelNames(virConnectPtr conn, char ***aliases, unsigned int flags);
+int virConnectGetHypervisorCPUModelDefinition(virConnectPtr conn, + const char *arch, + const char *machine,
Now we've got machine + arch, but still haven't got 'virttype' and 'emulator' parameters
+ const char *name, + char **xmlCPU, + unsigned int flags); +
diff --git a/src/libvirt-host.c b/src/libvirt-host.c index 6e734628c1..8875f67a7b 100644 --- a/src/libvirt-host.c +++ b/src/libvirt-host.c @@ -1288,6 +1288,60 @@ virConnectGetHypervisorCPUModelNames(virConnectPtr conn, return -1; }
+/** + * virConnectGetHypervisorCPUModelDefinition: + * + * @conn: virConnect connection + * @arch: Architecture + * @machine: Machine type
Should be optional, defaulting to the default machine type if omitted. For that matter, arch should be optional too
+ * @name: CPU model name + * @xmlCPU: XML description of the CPUs + * @flags: extra flags; not used yet, so callers should always pass 0. + * + * Get the description of a specific hypervisor cpu model for a given machine + * type and architecture. + * + * Returns 0 on success, -1 otherwise. + * + * Since: 8.5.0 + */ +int +virConnectGetHypervisorCPUModelDefinition(virConnectPtr conn, + const char *arch, + const char *machine, + const char *name, + char **xmlCPU, + unsigned int flags) +{ + VIR_DEBUG("conn=%p, arch=%s, machine=%s, model=%s, flags=0x%x", conn, + NULLSTR(arch), NULLSTR(machine), NULLSTR(name), flags); + virResetLastError(); + + virCheckConnectReturn(conn, -1); + virCheckNonNullArgGoto(arch, error); + virCheckNonNullArgGoto(machine, error); + virCheckNonNullArgGoto(name, error); + + if (conn->driver->connectGetHypervisorCPUModelDefinition) { + int ret; + + ret = conn->driver->connectGetHypervisorCPUModelDefinition(conn, arch, + machine, + name, + xmlCPU, + flags); + if (ret < 0) + goto error; + + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(conn); + return -1; +}
/** * virConnectBaselineCPU: diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index c6a8e898ae..15ef29d07d 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -924,6 +924,7 @@ LIBVIRT_8.4.0 {
LIBVIRT_8.5.0 { global: + virConnectGetHypervisorCPUModelDefinition; virConnectGetHypervisorCPUModelNames; virDomainAbortJobFlags; } LIBVIRT_8.4.0; -- 2.31.1
With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|