[libvirt] [PATCH v2] virsh: Fix to list online cpus using virsh capabilities
Michal Privoznik
mprivozn at redhat.com
Thu May 28 15:24:06 UTC 2015
On 26.05.2015 18:40, Kothapally Madhu Pavan wrote:
> 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__
The following code it's 99% similar to the one just below it. This can
be written much shorter, much cleaner.
> + {
> + 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
> }
>
I'm fixing the patch, ACKing and pushing.
Congratulations on your first libvirt contribution!
Michal
More information about the libvir-list
mailing list