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,
+ const char *name,
+ char **xmlCPU,
+ unsigned int flags);
+
/**
* virConnectBaselineCPUFlags:
*
diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
index c81e5d4c75..b016ec7775 100644
--- a/src/driver-hypervisor.h
+++ b/src/driver-hypervisor.h
@@ -739,6 +739,14 @@ typedef int
char ***aliases,
unsigned int flags);
+typedef int
+(*virDrvConnectGetHypervisorCPUModelDefinition)(virConnectPtr conn,
+ const char *arch,
+ const char *machine,
+ const char *name,
+ char **xmlCPU,
+ unsigned int flags);
+
typedef int
(*virDrvDomainGetJobInfo)(virDomainPtr domain,
virDomainJobInfoPtr info);
@@ -1720,4 +1728,5 @@ struct _virHypervisorDriver {
virDrvDomainGetMessages domainGetMessages;
virDrvDomainStartDirtyRateCalc domainStartDirtyRateCalc;
virDrvConnectGetHypervisorCPUModelNames connectGetHypervisorCPUModelNames;
+ virDrvConnectGetHypervisorCPUModelDefinition connectGetHypervisorCPUModelDefinition;
};
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
+ * @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
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 :|
On Mon, Jul 18, 2022 at 11:26:07AM +0100, Daniel P. Berrangé wrote: > 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); > > + I'm not actually convinced this new API is needed at all. Thue virConnectBaselineHypervisorCPU API has a flag VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES to let you expand all features in a given CPU model name. 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 :|
© 2016 - 2026 Red Hat, Inc.