From 2562141f19cb564e714abf90c30bcb59db076444 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 11 Feb 2015 14:06:20 +0100 Subject: [PATCH] conf: numa: Don't duplicate NUMA cell cpumask The mask was stored both as a bitmap and as a string. The string is used for XML output only. Remove the string, as it can be reconstructed from the bitmap. The test change is necessary as the bitmap formatter doesn't "optimize" using the '^' operator. --- src/conf/cpu_conf.c | 14 +++++++------- src/conf/cpu_conf.h | 1 - src/conf/numa_conf.c | 4 +--- .../qemuxml2argv-numatune-memnode.xml | 2 +- .../qemuxml2xmlout-numatune-memnode.xml | 2 +- 5 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c index 98b309b0f..11ad5f41d 100644 --- a/src/conf/cpu_conf.c +++ b/src/conf/cpu_conf.c @@ -86,10 +86,8 @@ virCPUDefFree(virCPUDefPtr def) virCPUDefFreeModel(def); - for (i = 0; i < def->ncells; i++) { + for (i = 0; i < def->ncells; i++) virBitmapFree(def->cells[i].cpumask); - VIR_FREE(def->cells[i].cpustr); - } VIR_FREE(def->cells); VIR_FREE(def->vendor_id); @@ -162,9 +160,6 @@ virCPUDefCopy(const virCPUDef *cpu) if (!copy->cells[i].cpumask) goto error; - - if (VIR_STRDUP(copy->cells[i].cpustr, cpu->cells[i].cpustr) < 0) - goto error; } copy->cells_cpus = cpu->cells_cpus; } @@ -601,16 +596,21 @@ virCPUDefFormatBuf(virBufferPtr buf, virBufferAdjustIndent(buf, 2); for (i = 0; i < def->ncells; i++) { virMemAccess memAccess = def->cells[i].memAccess; + char *cpustr = NULL; + + if (!(cpustr = virBitmapFormat(def->cells[i].cpumask))) + return -1; virBufferAddLit(buf, "cells[i].cpustr); + virBufferAsprintf(buf, " cpus='%s'", cpustr); virBufferAsprintf(buf, " memory='%llu'", def->cells[i].mem); virBufferAddLit(buf, " unit='KiB'"); if (memAccess) virBufferAsprintf(buf, " memAccess='%s'", virMemAccessTypeToString(memAccess)); virBufferAddLit(buf, "/>\n"); + VIR_FREE(cpustr); } virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h index e20165620..d6efba71f 100644 --- a/src/conf/cpu_conf.h +++ b/src/conf/cpu_conf.h @@ -104,7 +104,6 @@ typedef struct _virCellDef virCellDef; typedef virCellDef *virCellDefPtr; struct _virCellDef { virBitmapPtr cpumask; /* CPUs that are part of this node */ - char *cpustr; /* CPUs stored in string form for dumpxml */ unsigned long long mem; /* Node memory in kB */ virMemAccess memAccess; }; diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c index 8879c1671..928496995 100644 --- a/src/conf/numa_conf.c +++ b/src/conf/numa_conf.c @@ -749,9 +749,7 @@ virDomainNumaDefCPUParseXML(virCPUDefPtr def, if (ncpus <= 0) goto cleanup; def->cells_cpus += ncpus; - - def->cells[cur_cell].cpustr = tmp; - tmp = NULL; + VIR_FREE(tmp); ctxt->node = nodes[i]; if (virDomainParseMemory("./@memory", "./@unit", ctxt, diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.xml b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.xml index 8912017a0..73dfdf587 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-memnode.xml @@ -17,7 +17,7 @@ - + diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-numatune-memnode.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-numatune-memnode.xml index ffc57cf57..75421252a 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-numatune-memnode.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-numatune-memnode.xml @@ -17,7 +17,7 @@ - + -- 2.39.5