<div dir="ltr">pipeline test results for this patch:<div><a href="https://gitlab.com/ZhengZhenyu/libvirt/pipelines/140890614">https://gitlab.com/ZhengZhenyu/libvirt/pipelines/140890614</a> <br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 29, 2020 at 3:51 PM Zhenyu Zheng <<a href="mailto:zhengzhenyulixi@gmail.com">zhengzhenyulixi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Introduce vendor and model struct and related<br>cleanup functions for ARM cpu.<br><br>Signed-off-by: Zhenyu Zheng <<a href="mailto:zhengzhenyulixi@gmail.com" target="_blank">zhengzhenyulixi@gmail.com</a>><br>---<br> src/cpu/cpu_arm.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++<br> 1 file changed, 75 insertions(+)<br><br>diff --git a/src/cpu/cpu_arm.c b/src/cpu/cpu_arm.c<br>index ee5802198f..d8f571cae3 100644<br>--- a/src/cpu/cpu_arm.c<br>+++ b/src/cpu/cpu_arm.c<br>@@ -1,6 +1,7 @@<br> /*<br> * cpu_arm.c: CPU driver for arm CPUs<br> *<br>+ * Copyright (C) 2020 Huawei Technologies Co., Ltd.<br> * Copyright (C) 2013 Red Hat, Inc.<br> * Copyright (C) Canonical Ltd. 2012<br> *<br>@@ -23,12 +24,16 @@<br> <br> #include "viralloc.h"<br> #include "cpu.h"<br>+#include "cpu_arm.h"<br> #include "cpu_map.h"<br>+#include "virlog.h"<br> #include "virstring.h"<br> #include "virxml.h"<br> <br> #define VIR_FROM_THIS VIR_FROM_CPU<br> <br>+VIR_LOG_INIT("cpu.cpu_arm");<br>+<br> static const virArch archs[] = {<br> VIR_ARCH_ARMV6L,<br> VIR_ARCH_ARMV7B,<br>@@ -36,6 +41,21 @@ static const virArch archs[] = {<br> VIR_ARCH_AARCH64,<br> };<br> <br>+typedef struct _virCPUarmVendor virCPUarmVendor;<br>+typedef virCPUarmVendor *virCPUarmVendorPtr;<br>+struct _virCPUarmVendor {<br>+ char *name;<br>+ unsigned long value;<br>+};<br>+<br>+typedef struct _virCPUarmModel virCPUarmModel;<br>+typedef virCPUarmModel *virCPUarmModelPtr;<br>+struct _virCPUarmModel {<br>+ char *name;<br>+ virCPUarmVendorPtr vendor;<br>+ virCPUarmData data;<br>+};<br>+<br> typedef struct _virCPUarmFeature virCPUarmFeature;<br> typedef virCPUarmFeature *virCPUarmFeaturePtr;<br> struct _virCPUarmFeature {<br>@@ -64,6 +84,10 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUarmFeature, virCPUarmFeatureFree);<br> typedef struct _virCPUarmMap virCPUarmMap;<br> typedef virCPUarmMap *virCPUarmMapPtr;<br> struct _virCPUarmMap {<br>+ size_t nvendors;<br>+ virCPUarmVendorPtr *vendors;<br>+ size_t nmodels;<br>+ virCPUarmModelPtr *models;<br> GPtrArray *features;<br> };<br> <br>@@ -81,12 +105,62 @@ virCPUarmMapNew(void)<br> return map;<br> }<br> <br>+static void<br>+virCPUarmDataClear(virCPUarmData *data)<br>+{<br>+ if (!data)<br>+ return;<br>+<br>+ VIR_FREE(data->features);<br>+}<br>+<br>+static void<br>+virCPUarmDataFree(virCPUDataPtr cpuData)<br>+{<br>+ if (!cpuData)<br>+ return;<br>+<br>+ virCPUarmDataClear(&cpuData->data.arm);<br>+ VIR_FREE(cpuData);<br>+}<br>+<br>+static void<br>+virCPUarmModelFree(virCPUarmModelPtr model)<br>+{<br>+ if (!model)<br>+ return;<br>+<br>+ virCPUarmDataClear(&model->data);<br>+ g_free(model->name);<br>+ g_free(model);<br>+}<br>+<br>+static void<br>+virCPUarmVendorFree(virCPUarmVendorPtr vendor)<br>+{<br>+ if (!vendor)<br>+ return;<br>+<br>+ g_free(vendor->name);<br>+ g_free(vendor);<br>+}<br>+<br> static void<br> virCPUarmMapFree(virCPUarmMapPtr map)<br> {<br> if (!map)<br> return;<br> <br>+ size_t i;<br>+<br>+ for (i = 0; i < map->nmodels; i++)<br>+ virCPUarmModelFree(map->models[i]);<br>+ g_free(map->models);<br>+<br>+ for (i = 0; i < map->nvendors; i++)<br>+ virCPUarmVendorFree(map->vendors[i]);<br>+ g_free(map->vendors);<br>+<br> g_ptr_array_free(map->features, TRUE);<br> <br> g_free(map);<br>@@ -259,6 +333,7 @@ struct cpuArchDriver cpuDriverArm = {<br> .compare = virCPUarmCompare,<br> .decode = NULL,<br> .encode = NULL,<br>+ .dataFree = virCPUarmDataFree,<br> .baseline = virCPUarmBaseline,<br> .update = virCPUarmUpdate,<br> .validateFeatures = virCPUarmValidateFeatures,<br>-- <br>2.26.2<br></div>
</blockquote></div>