[libvirt] [PATCH v3 12/28] cpu: Rework cpuDataFree

Jiri Denemark jdenemar at redhat.com
Thu Feb 23 14:15:10 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 3:
    - ACKed in v2
    - no change
    
    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 6a808a0c1..051a58040 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 67a17c35f..145e23bd8 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -984,7 +984,6 @@ virSecretObjSetValueSize;
 # cpu/cpu.h
 cpuBaseline;
 cpuBaselineXML;
-cpuDataFree;
 cpuDecode;
 cpuEncode;
 cpuNodeData;
@@ -994,6 +993,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 f31a9ce6e..5c0353159 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -1092,7 +1092,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 24c1e600a..c8e1764f8 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -6597,7 +6597,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 1d7128037..82ff95d20 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3816,7 +3816,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 440859117..1ca9fd726 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