<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>