SHA256
1
0
forked from pool/numactl
numactl/numactl-hardware-bits_per_long_cpus.diff

62 lines
1.5 KiB
Diff

From: Arnd Bergmann <arnd@arndb.de>
To: Cliff Wickman <cpw@sgi.com>
Subject: [PATCH] fix output of numactl --hardware with >BITS_PER_LONG cpus
Date: Wed, 28 Jan 2009 17:41:16 +0100
Cc: linux-numa@vger.kernel.org,
hannsj_uhl@de.ibm.com,
wmb@us.ibm.com
There was evidently a glitch in the conversion of numactl to libnuma2:
The print_node_cpus function tries to find the size of the bitmask,
which it no longer needs to. This results in printing only the
first word of the CPU mask.
This fixes the function to print all available CPUs again.
Found by Bill Buros on a 128-way 64 bit system.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
numactl.c | 24 ++++++------------------
1 file changed, 6 insertions(+), 18 deletions(-)
--- a/numactl.c
+++ b/numactl.c
@@ -199,28 +199,16 @@ static void print_distances(int maxnode)
void print_node_cpus(int node)
{
- int len = 1;
int conf_cpus = numa_num_configured_cpus();
+ int i, err;
+ struct bitmask *cpus;
- for (;;) {
- int i, err;
- struct bitmask *cpus;
-
- cpus = numa_bitmask_alloc(conf_cpus);
- errno = 0;
- err = numa_node_to_cpus(node, cpus);
- if (err < 0) {
- if (errno == ERANGE) {
- len *= 2;
- continue;
- }
- break;
- }
- for (i = 0; i < len*BITS_PER_LONG; i++)
+ cpus = numa_bitmask_alloc(conf_cpus);
+ err = numa_node_to_cpus(node, cpus);
+ if (err >= 0)
+ for (i = 0; i < conf_cpus; i++)
if (numa_bitmask_isbitset(cpus, i))
printf(" %d", i);
- break;
- }
putchar('\n');
}