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.
This commit is contained in:
Peter Krempa 2015-02-11 14:06:20 +01:00
parent 34a1dd73b8
commit 2562141f19
5 changed files with 10 additions and 13 deletions

View File

@ -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, "<cell");
virBufferAsprintf(buf, " id='%zu'", i);
virBufferAsprintf(buf, " cpus='%s'", def->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, "</numa>\n");

View File

@ -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;
};

View File

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

View File

@ -17,7 +17,7 @@
<numa>
<cell id='0' cpus='0' memory='20002' unit='KiB'/>
<cell id='1' cpus='1-27,29' memory='660066' unit='KiB'/>
<cell id='2' cpus='28-31,^29' memory='24002400' unit='KiB'/>
<cell id='2' cpus='28,30-31' memory='24002400' unit='KiB'/>
</numa>
</cpu>
<clock offset='utc'/>

View File

@ -17,7 +17,7 @@
<numa>
<cell id='0' cpus='0' memory='20002' unit='KiB'/>
<cell id='1' cpus='1-27,29' memory='660066' unit='KiB'/>
<cell id='2' cpus='28-31,^29' memory='24002400' unit='KiB'/>
<cell id='2' cpus='28,30-31' memory='24002400' unit='KiB'/>
</numa>
</cpu>
<clock offset='utc'/>