diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index d3b22f7dd0..c825cb0503 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -802,6 +802,41 @@ virCapabilitiesAddStoragePool(virCaps *caps, } +static int +virCapsHostNUMACellCPUFormat(virBuffer *buf, + const virCapsHostNUMACellCPU *cpus, + int ncpus) +{ + g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); + size_t j; + + virBufferAsprintf(&attrBuf, " num='%d'", ncpus); + + for (j = 0; j < ncpus; j++) { + virBufferAsprintf(&childBuf, "\n"); + } + + virXMLFormatElement(buf, "cpus", &attrBuf, &childBuf); + return 0; +} + + static int virCapabilitiesHostNUMAFormat(virBuffer *buf, virCapsHostNUMA *caps) @@ -835,28 +870,9 @@ virCapabilitiesHostNUMAFormat(virBuffer *buf, virNumaDistanceFormat(buf, cell->distances, cell->ndistances); - virBufferAsprintf(buf, "\n", cell->ncpus); - virBufferAdjustIndent(buf, 2); - for (j = 0; j < cell->ncpus; j++) { - virBufferAsprintf(buf, "cpus[j].id); + if (virCapsHostNUMACellCPUFormat(buf, cell->cpus, cell->ncpus) < 0) + return -1; - if (cell->cpus[j].siblings) { - g_autofree char *siblings = NULL; - - if (!(siblings = virBitmapFormat(cell->cpus[j].siblings))) - return -1; - - virBufferAsprintf(buf, - " socket_id='%d' die_id='%d' core_id='%d' siblings='%s'", - cell->cpus[j].socket_id, - cell->cpus[j].die_id, - cell->cpus[j].core_id, - siblings); - } - virBufferAddLit(buf, "/>\n"); - } - virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); }