[PATCH V3 3/5] cpu: Introduce ARM related structs

Jiri Denemark jdenemar at redhat.com
Tue May 12 15:39:52 UTC 2020


On Wed, Apr 22, 2020 at 15:11:20 +0800, ZhengZhenyu wrote:
> Introduce vendor and model struct and related
> cleanup functions for ARM cpu.
> 
> Signed-off-by: Zhenyu Zheng <zhengzhenyulixi at gmail.com>
> ---
>  src/cpu/cpu_arm.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 73 insertions(+)
> 
> diff --git a/src/cpu/cpu_arm.c b/src/cpu/cpu_arm.c
> index ee5802198f..2009904cc9 100644
> --- a/src/cpu/cpu_arm.c
> +++ b/src/cpu/cpu_arm.c
...
> @@ -81,12 +103,62 @@ virCPUarmMapNew(void)
>      return map;
>  }
>  
> +static void
> +virCPUarmDataClear(virCPUarmData *data)
> +{
> +    if (!data)
> +        return;
> +
> +    VIR_FREE(data->features);

virStringListFree(data->features)

> +}
> +
> +static void
> +virCPUarmDataFree(virCPUDataPtr cpuData)
> +{
> +    if (!cpuData)
> +        return;
> +
> +    virCPUarmDataClear(&cpuData->data.arm);
> +    VIR_FREE(cpuData);

g_free()

> +}

The two functions above should go in one patch with the structure
definition. Either you can move them to the previous patch or you can
squash the two patches into a single one.

> +
> +static void
> +virCPUarmModelFree(virCPUarmModelPtr model)
> +{
> +    if (!model)
> +        return;
> +
> +    virCPUarmDataClear(&model->data);
> +    g_free(model->name);
> +    g_free(model);
> +}

Please, define the autoptr clean function for both model and vendor
structures so that you can later use g_autoptr(virCPUarm...) ... = NULL;
declarations:

    G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUarmModel, virCPUarmModelFree);

> +
> +static void
> +virCPUarmVendorFree(virCPUarmVendorPtr vendor)
> +{
> +    if (!vendor)
> +        return;
> +
> +    g_free(vendor->name);
> +    g_free(vendor);
> +}

    G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUarmVendor, virCPUarmVendorFree);

> +
>  static void
>  virCPUarmMapFree(virCPUarmMapPtr map)
>  {
>      if (!map)
>          return;
>  
> +    size_t i;

We declare all variables in the beginning of each block, i.e., this
should go above the if (!map) check.

> +
> +    for (i = 0; i < map->nmodels; i++)
> +        virCPUarmModelFree(map->models[i]);
> +    g_free(map->models);
> +
> +    for (i = 0; i < map->nvendors; i++)
> +        virCPUarmVendorFree(map->vendors[i]);
> +    g_free(map->vendors);
> +
>      g_ptr_array_free(map->features, TRUE);
>  
>      g_free(map);
> @@ -259,6 +331,7 @@ struct cpuArchDriver cpuDriverArm = {
>      .compare = virCPUarmCompare,
>      .decode = NULL,
>      .encode = NULL,
> +    .dataFree = virCPUarmDataFree,
>      .baseline = virCPUarmBaseline,
>      .update = virCPUarmUpdate,
>      .validateFeatures = virCPUarmValidateFeatures,

And the same applies for this hunk: it should go into the patch which
introduced virCPUarmData.

Jirka




More information about the libvir-list mailing list