[libvirt] [PATCH 02/41] domcaps: Add support for listing supported CPU models
John Ferlan
jferlan at redhat.com
Mon Aug 29 16:31:44 UTC 2016
On 08/12/2016 09:32 AM, Jiri Denemark wrote:
> The patch adds <cpu> element to domain capabilities XML:
>
> <cpu>
> <mode name='host-passthrough' supported='yes'/>
> <mode name='host-model' supported='yes'/>
> <mode name='custom' supported='yes'>
> <model>Broadwell</model>
> <model>Broadwell-noTSX</model>
> ...
> </mode>
> </cpu>
>
> Applications can use it to inspect what CPU configuration modes are
> supported for a specific combination of domain type, emulator binary,
> guest architecture and machine type.
>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> docs/formatdomaincaps.html.in | 44 ++++++
> docs/schemas/domaincaps.rng | 43 ++++++
> src/conf/domain_capabilities.c | 150 +++++++++++++++++++++
> src/conf/domain_capabilities.h | 33 +++++
> src/libvirt_private.syms | 4 +
> tests/domaincapsschemadata/basic.xml | 5 +
> tests/domaincapsschemadata/full.xml | 9 ++
> tests/domaincapsschemadata/libxl-xenfv-usb.xml | 5 +
> tests/domaincapsschemadata/libxl-xenfv.xml | 5 +
> tests/domaincapsschemadata/libxl-xenpv-usb.xml | 5 +
> tests/domaincapsschemadata/libxl-xenpv.xml | 5 +
> tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml | 5 +
> .../qemu_2.6.0-gicv2-virt.aarch64.xml | 5 +
> .../qemu_2.6.0-gicv3-virt.aarch64.xml | 5 +
> tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml | 5 +
> tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml | 5 +
> tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml | 5 +
> tests/domaincapstest.c | 9 ++
> 18 files changed, 347 insertions(+)
[...]
> diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
> index 1676f0e..c07f995 100644
> --- a/src/conf/domain_capabilities.c
> +++ b/src/conf/domain_capabilities.c
[...]
> +
> +int
> +virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
> + char **name)
> +{
> + if (VIR_RESIZE_N(cpuModels->models, cpuModels->alloc,
> + cpuModels->count, 1) < 0)
> + return -1;
> +
> + cpuModels->models[cpuModels->count++].name = *name;
> + *name = NULL;
Similar to VIR_STEAL_PTR with the added count++ twist...
> + return 0;
> +}
> +
> +
> +int
> +virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
> + const char *name,
> + ssize_t nameLen)
> +{
> + char *copy = NULL;
> +
> + if (VIR_STRNDUP(copy, name, nameLen) < 0)
> + goto error;
> +
> + if (virDomainCapsCPUModelsAddSteal(cpuModels, ©) < 0)
> + goto error;
> +
> + return 0;
> +
> + error:
> + VIR_FREE(copy);
> + return -1;
> +}
> +
> +
> int
> virDomainCapsEnumSet(virDomainCapsEnumPtr capsEnum,
> const char *capsEnumName,
> @@ -234,6 +338,51 @@ virDomainCapsOSFormat(virBufferPtr buf,
> }
>
> static void
[...]
> diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
> index 492a9cf..509c306 100644
> --- a/src/conf/domain_capabilities.h
> +++ b/src/conf/domain_capabilities.h
> @@ -102,6 +102,30 @@ struct _virDomainCapsFeatureGIC {
> virDomainCapsEnum version; /* Info about virGICVersion */
> };
>
> +typedef struct _virDomainCapsCPUModel virDomainCapsCPUModel;
> +typedef virDomainCapsCPUModel *virDomainCapsCPUModelPtr;
> +struct _virDomainCapsCPUModel {
> + char *name;
> +};
> +
> +typedef struct _virDomainCapsCPUModels virDomainCapsCPUModels;
> +typedef virDomainCapsCPUModels *virDomainCapsCPUModelsPtr;
> +struct _virDomainCapsCPUModels {
> + virObject parent;
> +
> + size_t alloc;
> + size_t count;
Easier for me to read/see "->nmodels_max" and "->nmodels"... Not sure
how pervasive it is to change... Not a requirement, your call...
> + virDomainCapsCPUModelPtr models;
> +};
> +
> +typedef struct _virDomainCapsCPU virDomainCapsCPU;
> +typedef virDomainCapsCPU *virDomainCapsCPUPtr;
> +struct _virDomainCapsCPU {
> + bool hostPassthrough;
> + bool hostModel;
> + virDomainCapsCPUModelsPtr custom;
> +};
> +
[...]
More information about the libvir-list
mailing list