On Sun, Dec 02, 2018 at 23:10:22 -0600, Chris Venteicher wrote:
> Create public function to convert virCPUDef data structure into
> qemuMonitorCPUModelInfoPtr data structure.
> 
> There was no existing code to reuse to create this function
> so this new virQEMUCapsCPUModelInfoFromCPUDef function was based on
> reversing the action of the existing virQEMUCapsCPUModelInfoToCPUDef
> function.
> 
> Signed-off-by: Chris Venteicher <cvent...@redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 46 ++++++++++++++++++++++++++++++++++++
>  src/qemu/qemu_capabilities.h |  1 +
>  2 files changed, 47 insertions(+)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 74f670459f..b36ccda090 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -3642,6 +3642,51 @@ virQEMUCapsLoadCache(virArch hostArch,
>  }
>  
>  
> +/* virCPUDef model    => qemuMonitorCPUModelInfo name
> + * virCPUDef features => qemuMonitorCPUModelInfo boolean properties */
> +qemuMonitorCPUModelInfoPtr
> +virQEMUCapsCPUModelInfoFromCPUDef(const virCPUDef *cpuDef)
> +{
> +    size_t i;
> +    qemuMonitorCPUModelInfoPtr cpuModel = NULL;
> +    qemuMonitorCPUModelInfoPtr ret = NULL;
> +
> +    if (!cpuDef || (VIR_ALLOC(cpuModel) < 0))
> +        goto cleanup;
> +
> +    VIR_DEBUG("cpuDef->model = %s", NULLSTR(cpuDef->model));

Similar comment to the one in the previous patch.

> +
> +    if (VIR_STRDUP(cpuModel->name, cpuDef->model) < 0 ||
> +        VIR_ALLOC_N(cpuModel->props, cpuDef->nfeatures) < 0)
> +        goto cleanup;
> +
> +    cpuModel->nprops = 0;
> +
> +    for (i = 0; i < cpuDef->nfeatures; i++) {
> +        qemuMonitorCPUPropertyPtr prop = 
> &(cpuModel->props[cpuModel->nprops]);
> +        virCPUFeatureDefPtr feature = &(cpuDef->features[i]);
> +
> +        if (!(feature->name) ||

I don't think there's any need to check for feature->name == NULL. If
there's a feature in cpuDef, its name is not NULL.

> +            VIR_STRDUP(prop->name, feature->name) < 0)
> +            goto cleanup;
> +
> +        prop->type = QEMU_MONITOR_CPU_PROPERTY_BOOLEAN;
> +
> +        prop->value.boolean = feature->policy == -1 || /* policy undefined */
> +                              feature->policy == VIR_CPU_FEATURE_FORCE ||
> +                              feature->policy == VIR_CPU_FEATURE_REQUIRE;

This semantics should be documented and probably even configurable in
some way. -1 is easy, it's only used in host CPUs and the feature is
either there (with policy -1) or missing. But I can imagine that
VIR_CPU_FEATURE_FORCE would need to be ignored in some cases.
Alternatively we could define the function only for -1 and REQUIRE and
let the caller adapt the input cpuDef if they need something else.

> +
> +        cpuModel->nprops++;
> +    }
> +
> +    VIR_STEAL_PTR(ret, cpuModel);
> +
> + cleanup:
> +    qemuMonitorCPUModelInfoFree(cpuModel);
> +    return ret;
> +}
> +
> +
>  /* qemuMonitorCPUModelInfo name               => virCPUDef model
>   * qemuMonitorCPUModelInfo boolean properties => virCPUDef features
>   *
> @@ -3693,6 +3738,7 @@ virQEMUCapsCPUModelInfoToCPUDef(bool migratable, 
> qemuMonitorCPUModelInfoPtr mode
>      return ret;
>  }
>  
> +
>  static void
>  virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps,
>                                    virBufferPtr buf,

This hunk does not belong to this patch.

> diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
> index 52e36e76b6..9bc6773263 100644
> --- a/src/qemu/qemu_capabilities.h
> +++ b/src/qemu/qemu_capabilities.h
> @@ -579,6 +579,7 @@ int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr 
> qemuCaps,
>  void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps,
>                                      const char *machineType);
>  
> +qemuMonitorCPUModelInfoPtr virQEMUCapsCPUModelInfoFromCPUDef(const virCPUDef 
> *cpuDef);
>  virCPUDefPtr virQEMUCapsCPUModelInfoToCPUDef(bool migratable,
>                                               qemuMonitorCPUModelInfoPtr 
> model);
>  

Jirka

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to