mirror of
https://github.com/libvirt/libvirt.git
synced 2025-01-24 15:26:40 -06:00
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:
parent
34a1dd73b8
commit
2562141f19
@ -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");
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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,
|
||||
|
@ -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'/>
|
||||
|
@ -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'/>
|
||||
|
Loading…
Reference in New Issue
Block a user