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 <jdenemar@redhat.com>
This commit is contained in:
Jiri Denemark 2017-02-02 15:37:40 +01:00
parent 5acdd4a6b4
commit f6d55a5f42
17 changed files with 38 additions and 59 deletions

View File

@ -68,7 +68,7 @@ virBhyveCapsInitCPU(virCapsPtr caps,
ret = 0; ret = 0;
cleanup: cleanup:
cpuDataFree(data); virCPUDataFree(data);
return ret; return ret;

View File

@ -331,7 +331,7 @@ virCPUDataNew(virArch arch)
/** /**
* cpuDataFree: * virCPUDataFree:
* *
* @data: CPU data structure to be freed * @data: CPU data structure to be freed
* *
@ -340,26 +340,19 @@ virCPUDataNew(virArch arch)
* Returns nothing. * Returns nothing.
*/ */
void void
cpuDataFree(virCPUDataPtr data) virCPUDataFree(virCPUDataPtr data)
{ {
struct cpuArchDriver *driver; struct cpuArchDriver *driver;
VIR_DEBUG("data=%p", data); VIR_DEBUG("data=%p", data);
if (data == NULL) if (!data)
return; return;
if ((driver = cpuGetSubDriver(data->arch)) == NULL) if ((driver = cpuGetSubDriver(data->arch)) && driver->dataFree)
return; driver->dataFree(data);
else
if (driver->free == NULL) { VIR_FREE(data);
virReportError(VIR_ERR_NO_SUPPORT,
_("cannot free CPU data for %s architecture"),
virArchToString(data->arch));
return;
}
(driver->free)(data);
} }

View File

@ -116,7 +116,7 @@ struct cpuArchDriver {
virCPUArchCompare compare; virCPUArchCompare compare;
cpuArchDecode decode; cpuArchDecode decode;
cpuArchEncode encode; cpuArchEncode encode;
cpuArchDataFree free; cpuArchDataFree dataFree;
cpuArchNodeData nodeData; cpuArchNodeData nodeData;
cpuArchBaseline baseline; cpuArchBaseline baseline;
virCPUArchUpdate update; virCPUArchUpdate update;
@ -166,7 +166,7 @@ virCPUDataPtr
virCPUDataNew(virArch arch); virCPUDataNew(virArch arch);
void void
cpuDataFree (virCPUDataPtr data); virCPUDataFree(virCPUDataPtr data);
virCPUDataPtr virCPUDataPtr
cpuNodeData (virArch arch); cpuNodeData (virArch arch);

View File

@ -37,12 +37,6 @@ static const virArch archs[] = {
VIR_ARCH_AARCH64, VIR_ARCH_AARCH64,
}; };
static void
armDataFree(virCPUDataPtr data)
{
VIR_FREE(data);
}
static int static int
virCPUarmUpdate(virCPUDefPtr guest, virCPUarmUpdate(virCPUDefPtr guest,
@ -117,7 +111,6 @@ struct cpuArchDriver cpuDriverArm = {
.compare = virCPUarmCompare, .compare = virCPUarmCompare,
.decode = NULL, .decode = NULL,
.encode = NULL, .encode = NULL,
.free = armDataFree,
.nodeData = NULL, .nodeData = NULL,
.baseline = armBaseline, .baseline = armBaseline,
.update = virCPUarmUpdate, .update = virCPUarmUpdate,

View File

@ -705,7 +705,7 @@ ppc64DriverDecode(virCPUDefPtr cpu,
} }
static void static void
ppc64DriverFree(virCPUDataPtr data) virCPUppc64DataFree(virCPUDataPtr data)
{ {
if (!data) if (!data)
return; return;
@ -741,7 +741,7 @@ ppc64DriverNodeData(virArch arch)
return nodeData; return nodeData;
error: error:
ppc64DriverFree(nodeData); virCPUppc64DataFree(nodeData);
return NULL; return NULL;
} }
@ -901,7 +901,7 @@ struct cpuArchDriver cpuDriverPPC64 = {
.compare = virCPUppc64Compare, .compare = virCPUppc64Compare,
.decode = ppc64DriverDecode, .decode = ppc64DriverDecode,
.encode = NULL, .encode = NULL,
.free = ppc64DriverFree, .dataFree = virCPUppc64DataFree,
.nodeData = ppc64DriverNodeData, .nodeData = ppc64DriverNodeData,
.baseline = ppc64DriverBaseline, .baseline = ppc64DriverBaseline,
.update = virCPUppc64Update, .update = virCPUppc64Update,

View File

@ -33,12 +33,6 @@
static const virArch archs[] = { VIR_ARCH_S390, VIR_ARCH_S390X }; static const virArch archs[] = { VIR_ARCH_S390, VIR_ARCH_S390X };
static void
s390DataFree(virCPUDataPtr data)
{
VIR_FREE(data);
}
static virCPUCompareResult static virCPUCompareResult
virCPUs390Compare(virCPUDefPtr host ATTRIBUTE_UNUSED, virCPUs390Compare(virCPUDefPtr host ATTRIBUTE_UNUSED,
virCPUDefPtr cpu ATTRIBUTE_UNUSED, virCPUDefPtr cpu ATTRIBUTE_UNUSED,
@ -115,7 +109,6 @@ struct cpuArchDriver cpuDriverS390 = {
.compare = virCPUs390Compare, .compare = virCPUs390Compare,
.decode = NULL, .decode = NULL,
.encode = NULL, .encode = NULL,
.free = s390DataFree,
.nodeData = NULL, .nodeData = NULL,
.baseline = NULL, .baseline = NULL,
.update = virCPUs390Update, .update = virCPUs390Update,

View File

@ -304,7 +304,7 @@ virCPUx86DataClear(virCPUx86Data *data)
static void static void
x86FreeCPUData(virCPUDataPtr data) virCPUx86DataFree(virCPUDataPtr data)
{ {
if (!data) if (!data)
return; return;
@ -1455,7 +1455,7 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
return cpuData; return cpuData;
error: error:
x86FreeCPUData(cpuData); virCPUx86DataFree(cpuData);
cpuData = NULL; cpuData = NULL;
goto cleanup; goto cleanup;
} }
@ -1641,7 +1641,7 @@ x86Compute(virCPUDefPtr host,
return ret; return ret;
error: error:
x86FreeCPUData(guestData); virCPUx86DataFree(guestData);
ret = VIR_CPU_COMPARE_ERROR; ret = VIR_CPU_COMPARE_ERROR;
goto cleanup; goto cleanup;
} }
@ -2033,12 +2033,12 @@ x86Encode(virArch arch,
return 0; return 0;
error: error:
x86FreeCPUData(data_forced); virCPUx86DataFree(data_forced);
x86FreeCPUData(data_required); virCPUx86DataFree(data_required);
x86FreeCPUData(data_optional); virCPUx86DataFree(data_optional);
x86FreeCPUData(data_disabled); virCPUx86DataFree(data_disabled);
x86FreeCPUData(data_forbidden); virCPUx86DataFree(data_forbidden);
x86FreeCPUData(data_vendor); virCPUx86DataFree(data_vendor);
return -1; return -1;
} }
@ -2380,7 +2380,7 @@ x86NodeData(virArch arch)
return cpuData; return cpuData;
error: error:
x86FreeCPUData(cpuData); virCPUx86DataFree(cpuData);
return NULL; return NULL;
} }
#endif #endif
@ -2718,7 +2718,7 @@ struct cpuArchDriver cpuDriverX86 = {
.compare = virCPUx86Compare, .compare = virCPUx86Compare,
.decode = x86DecodeCPUData, .decode = x86DecodeCPUData,
.encode = x86Encode, .encode = x86Encode,
.free = x86FreeCPUData, .dataFree = virCPUx86DataFree,
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
.nodeData = x86NodeData, .nodeData = x86NodeData,
#else #else

View File

@ -984,7 +984,6 @@ virSecretObjSetValueSize;
# cpu/cpu.h # cpu/cpu.h
cpuBaseline; cpuBaseline;
cpuBaselineXML; cpuBaselineXML;
cpuDataFree;
cpuDecode; cpuDecode;
cpuEncode; cpuEncode;
cpuNodeData; cpuNodeData;
@ -994,6 +993,7 @@ virCPUCompareXML;
virCPUConvertLegacy; virCPUConvertLegacy;
virCPUDataCheckFeature; virCPUDataCheckFeature;
virCPUDataFormat; virCPUDataFormat;
virCPUDataFree;
virCPUDataNew; virCPUDataNew;
virCPUDataParse; virCPUDataParse;
virCPUGetModels; virCPUGetModels;

View File

@ -145,7 +145,7 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap,
return cpudata; return cpudata;
error: error:
cpuDataFree(cpudata); virCPUDataFree(cpudata);
return NULL; return NULL;
} }
@ -198,7 +198,7 @@ libxlCapsInitCPU(virCapsPtr caps, libxl_physinfo *phy_info,
} }
cleanup: cleanup:
cpuDataFree(data); virCPUDataFree(data);
return ret; return ret;

View File

@ -1090,7 +1090,7 @@ virQEMUCapsInitCPU(virCapsPtr caps,
ret = 0; ret = 0;
cleanup: cleanup:
cpuDataFree(data); virCPUDataFree(data);
return ret; return ret;

View File

@ -6571,7 +6571,7 @@ qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data)
return cpudata; return cpudata;
error: error:
cpuDataFree(cpudata); virCPUDataFree(cpudata);
return NULL; return NULL;
} }

View File

@ -1606,7 +1606,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
goto cleanup; goto cleanup;
is_32bit = (virCPUDataCheckFeature(cpuData, "lm") != 1); is_32bit = (virCPUDataCheckFeature(cpuData, "lm") != 1);
cpuDataFree(cpuData); virCPUDataFree(cpuData);
} else if (model) { } else if (model) {
is_32bit = STREQ(model, "qemu32"); is_32bit = STREQ(model, "qemu32");
} }

View File

@ -3815,7 +3815,7 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
ret = true; ret = true;
cleanup: cleanup:
cpuDataFree(guestcpu); virCPUDataFree(guestcpu);
return ret; return ret;
} }

View File

@ -118,7 +118,7 @@ vmwareCapsInit(void)
cleanup: cleanup:
virCPUDefFree(cpu); virCPUDefFree(cpu);
cpuDataFree(data); virCPUDataFree(data);
return caps; return caps;

View File

@ -151,7 +151,7 @@ vzBuildCapabilities(void)
} }
cleanup: cleanup:
cpuDataFree(data); virCPUDataFree(data);
return caps; return caps;
error: error:

View File

@ -439,7 +439,7 @@ cpuTestHasFeature(const void *arg)
ret = 0; ret = 0;
cleanup: cleanup:
cpuDataFree(hostData); virCPUDataFree(hostData);
virCPUDefFree(host); virCPUDefFree(host);
return ret; return ret;
} }
@ -489,7 +489,7 @@ cpuTestCPUID(bool guest, const void *arg)
cleanup: cleanup:
VIR_FREE(hostFile); VIR_FREE(hostFile);
VIR_FREE(host); VIR_FREE(host);
cpuDataFree(hostData); virCPUDataFree(hostData);
virCPUDefFree(cpu); virCPUDefFree(cpu);
VIR_FREE(result); VIR_FREE(result);
return ret; return ret;
@ -549,7 +549,7 @@ cpuTestJSONCPUID(const void *arg)
cleanup: cleanup:
qemuMonitorTestFree(testMon); qemuMonitorTestFree(testMon);
cpuDataFree(cpuData); virCPUDataFree(cpuData);
virCPUDefFree(cpu); virCPUDefFree(cpu);
VIR_FREE(result); VIR_FREE(result);
VIR_FREE(json); VIR_FREE(json);

View File

@ -2410,7 +2410,7 @@ testQemuMonitorJSONGetCPUData(const void *opaque)
VIR_FREE(dataFile); VIR_FREE(dataFile);
VIR_FREE(jsonStr); VIR_FREE(jsonStr);
VIR_FREE(actual); VIR_FREE(actual);
cpuDataFree(cpuData); virCPUDataFree(cpuData);
qemuMonitorTestFree(test); qemuMonitorTestFree(test);
return ret; return ret;
} }
@ -2455,7 +2455,7 @@ testQemuMonitorJSONGetNonExistingCPUData(const void *opaque)
ret = 0; ret = 0;
cleanup: cleanup:
qemuMonitorTestFree(test); qemuMonitorTestFree(test);
cpuDataFree(cpuData); virCPUDataFree(cpuData);
return ret; return ret;
} }