From f6d55a5f422b97892041120372c8351f19ecb1cd Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Thu, 2 Feb 2017 15:37:40 +0100 Subject: [PATCH] cpu: Rework cpuDataFree 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 --- 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 1dc0593aff..52d6ca7829 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 6a808a0c17..051a58040e 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 ceb1e72560..0324284b91 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 653b06b2f9..3a0ee2b147 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 180ad87d18..a7c8545db9 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 0248328db4..9503e8e2bf 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 0058abef75..3b540f99cc 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 fb4b004372..4887f616b5 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 622e9f6bb1..117055cf23 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 29ca3d4f90..6f60a00ef4 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1090,7 +1090,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 334eff1b75..a5421cf301 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6571,7 +6571,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 405e655499..a215027c1d 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 760507d957..8b8b9d9cc0 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3815,7 +3815,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 4222f4e380..5b1b5f5fdc 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 4408591170..1ca9fd726f 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 8612e920ee..8d761af614 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 5b2d6bb343..402c87d455 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; }