提交 2562141f 编写于 作者: P Peter Krempa

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.
上级 34a1dd73
......@@ -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'/>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册