libnuma: Fix issue with numactl --hardware on sparse cpumaps
PATCH 1/1 libnuma: Fix issue with numactl --hardware on sparse cpumaps
Hi,
On a machine with sparse cpu ids, numactl fails to print the right cpus:
# numactl --hardware | grep cpus node 0 cpus: 0 2 4 6 node 1 cpus:
It turns out we were iterating through 0..nr_cpus, not 0..max_cpuid. The following patch fixes it by using a cpumask instead of an open coded bitmask, and looping from 0 to the size of the cpumask.
# numactl --hardware | grep cpus node 0 cpus: 0 2 4 6 node 1 cpus: 8 10 12 14
Signed-off-by Anton Blanchard <[email protected]>
---
numactl.c +2 -3
@@ -200,14 +200,13 @@void print_node_cpus (int node) { -int conf_cpus =numa_num_configured_cpus ();int i, err;struct bitmask *cpus; - cpus =numa_bitmask_alloc (conf_cpus); + cpus =numa_allocate_cpumask (); err =numa_node_to_cpus (node, cpus);if (err >=0 ) -for (i =0 ; i < conf_cpus; i++) +for (i =0 ; i < cpus->size; i++)if (numa_bitmask_isbitset (cpus, i))printf (" %d" , i);putchar ('\n' );