forked from pool/numactl
62 lines
1.5 KiB
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');
|
|
}
|
|
|