From 21008c013ca0d347d5b17013cbeb4c4c5763bd3c Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 16 Feb 2015 16:42:13 +0100 Subject: [PATCH] conf: numa: Always allocate the NUMA config Since our formatter now handles well if the config is allocated and not filled we can safely always-allocate the NUMA config and remove the ad-hoc allocation code. This will help in later patches as the parser will be refactored to just fill the data. --- src/conf/domain_conf.c | 10 +++++++++- src/conf/numa_conf.c | 37 +++++++++++++------------------------ src/conf/numa_conf.h | 1 + src/libvirt_private.syms | 1 + 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 724221069d..e9c6a825b8 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2319,9 +2319,17 @@ virDomainDefNew(void) { virDomainDefPtr ret; - ignore_value(VIR_ALLOC(ret)); + if (VIR_ALLOC(ret) < 0) + return NULL; + + if (!(ret->numa = virDomainNumaNew())) + goto error; return ret; + + error: + virDomainDefFree(ret); + return NULL; } diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c index 9b48fb87ea..81b51ca515 100644 --- a/src/conf/numa_conf.c +++ b/src/conf/numa_conf.c @@ -117,11 +117,6 @@ virDomainNumatuneNodeParseXML(virDomainNumaPtr *numatunePtr, goto cleanup; } - if (!numatune && VIR_ALLOC(numatune) < 0) - goto cleanup; - - *numatunePtr = numatune; - VIR_FREE(numatune->mem_nodes); if (VIR_ALLOC_N(numatune->mem_nodes, ncells) < 0) goto cleanup; @@ -224,11 +219,6 @@ virDomainNumatuneParseXML(virDomainNumaPtr *numatunePtr, node = virXPathNode("./numatune/memory[1]", ctxt); - if (*numatunePtr) { - virDomainNumaFree(*numatunePtr); - *numatunePtr = NULL; - } - if (!placement_static && !node) placement = VIR_DOMAIN_NUMATUNE_PLACEMENT_AUTO; @@ -454,27 +444,20 @@ virDomainNumatuneSet(virDomainNumaPtr *numatunePtr, int mode, virBitmapPtr nodeset) { - bool created = false; int ret = -1; - virDomainNumaPtr numatune; + virDomainNumaPtr numatune = *numatunePtr; /* No need to do anything in this case */ if (mode == -1 && placement == -1 && !nodeset) return 0; - if (!(*numatunePtr)) { - if (VIR_ALLOC(*numatunePtr) < 0) - goto cleanup; - - created = true; + if (!numatune->memory.specified) { if (mode == -1) mode = VIR_DOMAIN_NUMATUNE_MEM_STRICT; if (placement == -1) placement = VIR_DOMAIN_NUMATUNE_PLACEMENT_DEFAULT; } - numatune = *numatunePtr; - /* Range checks */ if (mode != -1 && (mode < 0 || mode >= VIR_DOMAIN_NUMATUNE_MEM_LAST)) { @@ -534,11 +517,6 @@ virDomainNumatuneSet(virDomainNumaPtr *numatunePtr, ret = 0; cleanup: - if (ret < 0 && created) { - virDomainNumaFree(*numatunePtr); - *numatunePtr = NULL; - } - return ret; } @@ -827,3 +805,14 @@ virDomainNumaGetCPUCountTotal(virCPUDefPtr numa) return ret; } + + +virDomainNumaPtr +virDomainNumaNew(void) +{ + virDomainNumaPtr ret = NULL; + + ignore_value(VIR_ALLOC(ret)); + + return ret; +} diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h index efb1bf01e3..42e83db4fd 100644 --- a/src/conf/numa_conf.h +++ b/src/conf/numa_conf.h @@ -56,6 +56,7 @@ typedef enum { VIR_ENUM_DECL(virNumaMemAccess) +virDomainNumaPtr virDomainNumaNew(void); void virDomainNumaFree(virDomainNumaPtr numa); /* diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b145c8b921..b220a322d2 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -629,6 +629,7 @@ virNodeDeviceObjUnlock; # conf/numa_conf.h virDomainNumaEquals; virDomainNumaFree; +virDomainNumaNew; virDomainNumatuneFormatNodeset; virDomainNumatuneFormatXML; virDomainNumatuneGetMode;