Virsh capabilities will list offline cpus as online when libvirt is compiled with numactl option disabled. This fix will list correct set of online cpus. --- src/nodeinfo.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 22df95c..410c9de 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -1651,6 +1651,47 @@ nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED) if (VIR_ALLOC_N(cpus, ncpus) < 0) return -1; +#ifdef __linux__ + { + int cid = 0; + int onlinecpus = nodeinfo.cpus; + + id = 0; + for (s = 0; s < nodeinfo.sockets; s++) { + for (c = 0; c < nodeinfo.cores; c++) { + for (t = 0; t < nodeinfo.threads; t++) { + if (virNodeGetCpuValue(SYSFS_CPU_PATH, id, "online", 1)) { + cpus[cid].id = id; + cpus[cid].socket_id = s; + cpus[cid].core_id = c; + if (!(cpus[cid].siblings = virBitmapNew(ncpus))) + goto error; + ignore_value(virBitmapSetBit(cpus[cid].siblings, id)); + cid++; + } + + id++; + } + } + } + + if (virCapabilitiesAddHostNUMACell(caps, 0, + nodeinfo.memory, + onlinecpus, cpus, + 0, NULL, + 0, NULL) < 0) + goto error; + + return 0; + + error: + for (; cid >= 0; cid--) + virBitmapFree(cpus[cid].siblings); + VIR_FREE(cpus); + return -1; + } +#else + { id = 0; for (s = 0; s < nodeinfo.sockets; s++) { for (c = 0; c < nodeinfo.cores; c++) { @@ -1680,6 +1721,8 @@ nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED) virBitmapFree(cpus[id].siblings); VIR_FREE(cpus); return -1; + } +#endif } static int -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list