[libvirt] [PATCH v2 16/33] cpu: Rework cpuDataFree

Jiri Denemark jdenemar at redhat.com
Wed Feb 15 16:44:50 UTC 2017


The new API is called virCPUDataFree. Individual CPU drivers are no
longer required to implement their own freeing function unless they need
to free architecture specific data from virCPUData.

Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
---

Notes:
    Version 2:
    - no change

 src/bhyve/bhyve_capabilities.c |  2 +-
 src/cpu/cpu.c                  | 21 +++++++--------------
 src/cpu/cpu.h                  |  4 ++--
 src/cpu/cpu_arm.c              |  7 -------
 src/cpu/cpu_ppc64.c            |  6 +++---
 src/cpu/cpu_s390.c             |  7 -------
 src/cpu/cpu_x86.c              | 22 +++++++++++-----------
 src/libvirt_private.syms       |  2 +-
 src/libxl/libxl_capabilities.c |  4 ++--
 src/qemu/qemu_capabilities.c   |  2 +-
 src/qemu/qemu_monitor_json.c   |  2 +-
 src/qemu/qemu_parse_command.c  |  2 +-
 src/qemu/qemu_process.c        |  2 +-
 src/vmware/vmware_conf.c       |  2 +-
 src/vz/vz_driver.c             |  2 +-
 tests/cputest.c                |  6 +++---
 tests/qemumonitorjsontest.c    |  4 ++--
 17 files changed, 38 insertions(+), 59 deletions(-)

diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c
index 1dc0593af..52d6ca782 100644
--- a/src/bhyve/bhyve_capabilities.c
+++ b/src/bhyve/bhyve_capabilities.c
@@ -68,7 +68,7 @@ virBhyveCapsInitCPU(virCapsPtr caps,
     ret = 0;
 
  cleanup:
-    cpuDataFree(data);
+    virCPUDataFree(data);
 
     return ret;
 
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
index 3063f00eb..45a17bf46 100644
--- a/src/cpu/cpu.c
+++ b/src/cpu/cpu.c
@@ -331,7 +331,7 @@ virCPUDataNew(virArch arch)
 
 
 /**
- * cpuDataFree:
+ * virCPUDataFree:
  *
  * @data: CPU data structure to be freed
  *
@@ -340,26 +340,19 @@ virCPUDataNew(virArch arch)
  * Returns nothing.
  */
 void
-cpuDataFree(virCPUDataPtr data)
+virCPUDataFree(virCPUDataPtr data)
 {
     struct cpuArchDriver *driver;
 
     VIR_DEBUG("data=%p", data);
 
-    if (data == NULL)
+    if (!data)
         return;
 
-    if ((driver = cpuGetSubDriver(data->arch)) == NULL)
-        return;
-
-    if (driver->free == NULL) {
-        virReportError(VIR_ERR_NO_SUPPORT,
-                       _("cannot free CPU data for %s architecture"),
-                       virArchToString(data->arch));
-        return;
-    }
-
-    (driver->free)(data);
+    if ((driver = cpuGetSubDriver(data->arch)) && driver->dataFree)
+        driver->dataFree(data);
+    else
+        VIR_FREE(data);
 }
 
 
diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h
index ceb1e7256..0324284b9 100644
--- a/src/cpu/cpu.h
+++ b/src/cpu/cpu.h
@@ -116,7 +116,7 @@ struct cpuArchDriver {
     virCPUArchCompare   compare;
     cpuArchDecode       decode;
     cpuArchEncode       encode;
-    cpuArchDataFree     free;
+    cpuArchDataFree     dataFree;
     cpuArchNodeData     nodeData;
     cpuArchBaseline     baseline;
     virCPUArchUpdate    update;
@@ -166,7 +166,7 @@ virCPUDataPtr
 virCPUDataNew(virArch arch);
 
 void
-cpuDataFree (virCPUDataPtr data);
+virCPUDataFree(virCPUDataPtr data);
 
 virCPUDataPtr
 cpuNodeData (virArch arch);
diff --git a/src/cpu/cpu_arm.c b/src/cpu/cpu_arm.c
index 653b06b2f..3a0ee2b14 100644
--- a/src/cpu/cpu_arm.c
+++ b/src/cpu/cpu_arm.c
@@ -37,12 +37,6 @@ static const virArch archs[] = {
     VIR_ARCH_AARCH64,
 };
 
-static void
-armDataFree(virCPUDataPtr data)
-{
-    VIR_FREE(data);
-}
-
 
 static int
 virCPUarmUpdate(virCPUDefPtr guest,
@@ -117,7 +111,6 @@ struct cpuArchDriver cpuDriverArm = {
     .compare = virCPUarmCompare,
     .decode = NULL,
     .encode = NULL,
-    .free = armDataFree,
     .nodeData = NULL,
     .baseline = armBaseline,
     .update = virCPUarmUpdate,
diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c
index 180ad87d1..a7c8545db 100644
--- a/src/cpu/cpu_ppc64.c
+++ b/src/cpu/cpu_ppc64.c
@@ -705,7 +705,7 @@ ppc64DriverDecode(virCPUDefPtr cpu,
 }
 
 static void
-ppc64DriverFree(virCPUDataPtr data)
+virCPUppc64DataFree(virCPUDataPtr data)
 {
     if (!data)
         return;
@@ -741,7 +741,7 @@ ppc64DriverNodeData(virArch arch)
     return nodeData;
 
  error:
-    ppc64DriverFree(nodeData);
+    virCPUppc64DataFree(nodeData);
     return NULL;
 }
 
@@ -901,7 +901,7 @@ struct cpuArchDriver cpuDriverPPC64 = {
     .compare    = virCPUppc64Compare,
     .decode     = ppc64DriverDecode,
     .encode     = NULL,
-    .free       = ppc64DriverFree,
+    .dataFree   = virCPUppc64DataFree,
     .nodeData   = ppc64DriverNodeData,
     .baseline   = ppc64DriverBaseline,
     .update     = virCPUppc64Update,
diff --git a/src/cpu/cpu_s390.c b/src/cpu/cpu_s390.c
index 0248328db..9503e8e2b 100644
--- a/src/cpu/cpu_s390.c
+++ b/src/cpu/cpu_s390.c
@@ -33,12 +33,6 @@
 
 static const virArch archs[] = { VIR_ARCH_S390, VIR_ARCH_S390X };
 
-static void
-s390DataFree(virCPUDataPtr data)
-{
-    VIR_FREE(data);
-}
-
 static virCPUCompareResult
 virCPUs390Compare(virCPUDefPtr host ATTRIBUTE_UNUSED,
                   virCPUDefPtr cpu ATTRIBUTE_UNUSED,
@@ -115,7 +109,6 @@ struct cpuArchDriver cpuDriverS390 = {
     .compare    = virCPUs390Compare,
     .decode     = NULL,
     .encode     = NULL,
-    .free       = s390DataFree,
     .nodeData   = NULL,
     .baseline   = NULL,
     .update     = virCPUs390Update,
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 0058abef7..3b540f99c 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -304,7 +304,7 @@ virCPUx86DataClear(virCPUx86Data *data)
 
 
 static void
-x86FreeCPUData(virCPUDataPtr data)
+virCPUx86DataFree(virCPUDataPtr data)
 {
     if (!data)
         return;
@@ -1455,7 +1455,7 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
     return cpuData;
 
  error:
-    x86FreeCPUData(cpuData);
+    virCPUx86DataFree(cpuData);
     cpuData = NULL;
     goto cleanup;
 }
@@ -1641,7 +1641,7 @@ x86Compute(virCPUDefPtr host,
     return ret;
 
  error:
-    x86FreeCPUData(guestData);
+    virCPUx86DataFree(guestData);
     ret = VIR_CPU_COMPARE_ERROR;
     goto cleanup;
 }
@@ -2033,12 +2033,12 @@ x86Encode(virArch arch,
     return 0;
 
  error:
-    x86FreeCPUData(data_forced);
-    x86FreeCPUData(data_required);
-    x86FreeCPUData(data_optional);
-    x86FreeCPUData(data_disabled);
-    x86FreeCPUData(data_forbidden);
-    x86FreeCPUData(data_vendor);
+    virCPUx86DataFree(data_forced);
+    virCPUx86DataFree(data_required);
+    virCPUx86DataFree(data_optional);
+    virCPUx86DataFree(data_disabled);
+    virCPUx86DataFree(data_forbidden);
+    virCPUx86DataFree(data_vendor);
     return -1;
 }
 
@@ -2380,7 +2380,7 @@ x86NodeData(virArch arch)
     return cpuData;
 
  error:
-    x86FreeCPUData(cpuData);
+    virCPUx86DataFree(cpuData);
     return NULL;
 }
 #endif
@@ -2718,7 +2718,7 @@ struct cpuArchDriver cpuDriverX86 = {
     .compare    = virCPUx86Compare,
     .decode     = x86DecodeCPUData,
     .encode     = x86Encode,
-    .free       = x86FreeCPUData,
+    .dataFree   = virCPUx86DataFree,
 #if defined(__i386__) || defined(__x86_64__)
     .nodeData   = x86NodeData,
 #else
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index cc5be84ea..56db100b5 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -987,7 +987,6 @@ virSecretObjSetValueSize;
 # cpu/cpu.h
 cpuBaseline;
 cpuBaselineXML;
-cpuDataFree;
 cpuDecode;
 cpuEncode;
 cpuNodeData;
@@ -997,6 +996,7 @@ virCPUCompareXML;
 virCPUConvertLegacy;
 virCPUDataCheckFeature;
 virCPUDataFormat;
+virCPUDataFree;
 virCPUDataNew;
 virCPUDataParse;
 virCPUGetModels;
diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c
index 622e9f6bb..117055cf2 100644
--- a/src/libxl/libxl_capabilities.c
+++ b/src/libxl/libxl_capabilities.c
@@ -145,7 +145,7 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap,
     return cpudata;
 
  error:
-    cpuDataFree(cpudata);
+    virCPUDataFree(cpudata);
     return NULL;
 }
 
@@ -198,7 +198,7 @@ libxlCapsInitCPU(virCapsPtr caps, libxl_physinfo *phy_info,
     }
 
  cleanup:
-    cpuDataFree(data);
+    virCPUDataFree(data);
 
     return ret;
 
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 2ba82456e..6ca6ea702 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -1091,7 +1091,7 @@ virQEMUCapsInitCPU(virCapsPtr caps,
     ret = 0;
 
  cleanup:
-    cpuDataFree(data);
+    virCPUDataFree(data);
 
     return ret;
 
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index b4da12167..cfb7f50aa 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -6592,7 +6592,7 @@ qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data)
     return cpudata;
 
  error:
-    cpuDataFree(cpudata);
+    virCPUDataFree(cpudata);
     return NULL;
 }
 
diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
index 405e65549..a215027c1 100644
--- a/src/qemu/qemu_parse_command.c
+++ b/src/qemu/qemu_parse_command.c
@@ -1606,7 +1606,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
                 goto cleanup;
 
             is_32bit = (virCPUDataCheckFeature(cpuData, "lm") != 1);
-            cpuDataFree(cpuData);
+            virCPUDataFree(cpuData);
         } else if (model) {
             is_32bit = STREQ(model, "qemu32");
         }
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index b9df01da5..95af7c283 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3843,7 +3843,7 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
     ret = true;
 
  cleanup:
-    cpuDataFree(guestcpu);
+    virCPUDataFree(guestcpu);
     return ret;
 }
 
diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c
index 4222f4e38..5b1b5f5fd 100644
--- a/src/vmware/vmware_conf.c
+++ b/src/vmware/vmware_conf.c
@@ -118,7 +118,7 @@ vmwareCapsInit(void)
 
  cleanup:
     virCPUDefFree(cpu);
-    cpuDataFree(data);
+    virCPUDataFree(data);
 
     return caps;
 
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 6aade90c4..181775809 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -151,7 +151,7 @@ vzBuildCapabilities(void)
     }
 
  cleanup:
-    cpuDataFree(data);
+    virCPUDataFree(data);
     return caps;
 
  error:
diff --git a/tests/cputest.c b/tests/cputest.c
index 8612e920e..8d761af61 100644
--- a/tests/cputest.c
+++ b/tests/cputest.c
@@ -439,7 +439,7 @@ cpuTestHasFeature(const void *arg)
     ret = 0;
 
  cleanup:
-    cpuDataFree(hostData);
+    virCPUDataFree(hostData);
     virCPUDefFree(host);
     return ret;
 }
@@ -489,7 +489,7 @@ cpuTestCPUID(bool guest, const void *arg)
  cleanup:
     VIR_FREE(hostFile);
     VIR_FREE(host);
-    cpuDataFree(hostData);
+    virCPUDataFree(hostData);
     virCPUDefFree(cpu);
     VIR_FREE(result);
     return ret;
@@ -549,7 +549,7 @@ cpuTestJSONCPUID(const void *arg)
 
  cleanup:
     qemuMonitorTestFree(testMon);
-    cpuDataFree(cpuData);
+    virCPUDataFree(cpuData);
     virCPUDefFree(cpu);
     VIR_FREE(result);
     VIR_FREE(json);
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index 5b2d6bb34..402c87d45 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -2410,7 +2410,7 @@ testQemuMonitorJSONGetCPUData(const void *opaque)
     VIR_FREE(dataFile);
     VIR_FREE(jsonStr);
     VIR_FREE(actual);
-    cpuDataFree(cpuData);
+    virCPUDataFree(cpuData);
     qemuMonitorTestFree(test);
     return ret;
 }
@@ -2455,7 +2455,7 @@ testQemuMonitorJSONGetNonExistingCPUData(const void *opaque)
     ret = 0;
  cleanup:
     qemuMonitorTestFree(test);
-    cpuDataFree(cpuData);
+    virCPUDataFree(cpuData);
     return ret;
 }
 
-- 
2.11.1




More information about the libvir-list mailing list