[libvirt] [PATCH v5 27/36] qemu_capabilities: Introduce CPUModelInfo to virCPUDef function
Jiri Denemark
jdenemar at redhat.com
Fri Jan 4 20:04:05 UTC 2019
On Sun, Dec 02, 2018 at 23:10:21 -0600, Chris Venteicher wrote:
> Move existing code to convert between cpu model info structures
> (qemuMonitorCPUModelInfoPtr into virCPUDef)
> into a reusable function.
>
> The new function is used in this and future patches.
>
> Signed-off-by: Chris Venteicher <cventeic at redhat.com>
> ---
> src/qemu/qemu_capabilities.c | 84 ++++++++++++++++++++++++++----------
> src/qemu/qemu_capabilities.h | 3 ++
> 2 files changed, 64 insertions(+), 23 deletions(-)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 8c5ec4cc9a..74f670459f 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
...
> @@ -3655,6 +3642,57 @@ virQEMUCapsLoadCache(virArch hostArch,
> }
>
>
> +/* qemuMonitorCPUModelInfo name => virCPUDef model
> + * qemuMonitorCPUModelInfo boolean properties => virCPUDef features
> + *
> + * migratable true: mark non-migratable features as disabled
> + * false: allow all features as required
Our common function documentation format would be better.
> + */
> +virCPUDefPtr
> +virQEMUCapsCPUModelInfoToCPUDef(bool migratable, qemuMonitorCPUModelInfoPtr model)
Each parameter on a separate line please. And I'd put @migratable after
@model since @model is the primary parameter in the conversion and
@migratable just changes the way some features are converted.
> +{
> + virCPUDefPtr cpu = NULL;
> + virCPUDefPtr ret = NULL;
> + size_t i;
> +
> + if (!model || VIR_ALLOC(cpu) < 0)
> + goto cleanup;
> +
> + VIR_DEBUG("model->name= %s", NULLSTR(model->name));
I don't think this function would actually work as expected if either
model or model->name were NULL. At best we'd return NULL, i.e., error
without reporting any error message.
VIR_ALLOC() should go after the initial VIR_DEBUG.
> +
> + if (VIR_STRDUP(cpu->model, model->name) < 0 ||
> + VIR_ALLOC_N(cpu->features, model->nprops) < 0)
> + goto cleanup;
> +
> + cpu->nfeatures_max = model->nprops;
> + cpu->nfeatures = 0;
> +
> + for (i = 0; i < model->nprops; i++) {
> + virCPUFeatureDefPtr feature = cpu->features + cpu->nfeatures;
> + qemuMonitorCPUPropertyPtr prop = model->props + i;
> +
> + if (prop->type != QEMU_MONITOR_CPU_PROPERTY_BOOLEAN)
> + continue;
> +
> + if (VIR_STRDUP(feature->name, prop->name) < 0)
> + goto cleanup;
> +
> + if (!prop->value.boolean ||
> + (migratable && prop->migratable == VIR_TRISTATE_BOOL_NO))
> + feature->policy = VIR_CPU_FEATURE_DISABLE;
> + else
> + feature->policy = VIR_CPU_FEATURE_REQUIRE;
> +
> + cpu->nfeatures++;
> + }
> +
> + VIR_STEAL_PTR(ret, cpu);
> +
> + cleanup:
> + virCPUDefFree(cpu);
> + return ret;
> +}
> +
Two empty lines between functions.
> static void
> virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps,
> virBufferPtr buf,
...
Jirka
More information about the libvir-list
mailing list