ping for reviews On Wed, Apr 22, 2020 at 3:12 PM ZhengZhenyu <zheng.zhe...@foxmail.com> wrote:
> Introduce vendor and model struct and related > cleanup functions for ARM cpu. > > Signed-off-by: Zhenyu Zheng <zhengzhenyul...@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 > @@ -1,6 +1,7 @@ > /* > * cpu_arm.c: CPU driver for arm CPUs > * > + * Copyright (C) 2020 Huawei Technologies Co., Ltd. > * Copyright (C) 2013 Red Hat, Inc. > * Copyright (C) Canonical Ltd. 2012 > * > @@ -23,7 +24,9 @@ > > #include "viralloc.h" > #include "cpu.h" > +#include "cpu_arm.h" > #include "cpu_map.h" > +#include "virlog.h" > #include "virstring.h" > #include "virxml.h" > > @@ -36,6 +39,21 @@ static const virArch archs[] = { > VIR_ARCH_AARCH64, > }; > > +typedef struct _virCPUarmVendor virCPUarmVendor; > +typedef virCPUarmVendor *virCPUarmVendorPtr; > +struct _virCPUarmVendor { > + char *name; > + unsigned long value; > +}; > + > +typedef struct _virCPUarmModel virCPUarmModel; > +typedef virCPUarmModel *virCPUarmModelPtr; > +struct _virCPUarmModel { > + char *name; > + virCPUarmVendorPtr vendor; > + virCPUarmData data; > +}; > + > typedef struct _virCPUarmFeature virCPUarmFeature; > typedef virCPUarmFeature *virCPUarmFeaturePtr; > struct _virCPUarmFeature { > @@ -64,6 +82,10 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUarmFeature, > virCPUarmFeatureFree); > typedef struct _virCPUarmMap virCPUarmMap; > typedef virCPUarmMap *virCPUarmMapPtr; > struct _virCPUarmMap { > + size_t nvendors; > + virCPUarmVendorPtr *vendors; > + size_t nmodels; > + virCPUarmModelPtr *models; > GPtrArray *features; > }; > > @@ -81,12 +103,62 @@ virCPUarmMapNew(void) > return map; > } > > +static void > +virCPUarmDataClear(virCPUarmData *data) > +{ > + if (!data) > + return; > + > + VIR_FREE(data->features); > +} > + > +static void > +virCPUarmDataFree(virCPUDataPtr cpuData) > +{ > + if (!cpuData) > + return; > + > + virCPUarmDataClear(&cpuData->data.arm); > + VIR_FREE(cpuData); > +} > + > +static void > +virCPUarmModelFree(virCPUarmModelPtr model) > +{ > + if (!model) > + return; > + > + virCPUarmDataClear(&model->data); > + g_free(model->name); > + g_free(model); > +} > + > +static void > +virCPUarmVendorFree(virCPUarmVendorPtr vendor) > +{ > + if (!vendor) > + return; > + > + g_free(vendor->name); > + g_free(vendor); > +} > + > static void > virCPUarmMapFree(virCPUarmMapPtr map) > { > if (!map) > return; > > + size_t i; > + > + 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, > -- > 2.26.0.windows.1 > >