[PATCH v3 12/28] cpu: Rework cpuDataFree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

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

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux