knfsd: when allocating per-cpu or per-node rpc thread pools, handle
the case of noncontiguous cpu or node numbers.
Tested:
Machine ARCH SMP NUMA SUNRPC nodes cpus hpni hppi pools(mode)
------- ---- --- ---- ------ ----- ---- ---- ---- ------------
4 cpu Xeon SMP x86_64 y y y 1 4 31 7 4 (percpu)
4 cpu Xeon SMP x86_64 y y m 1 4 31 7 4 (percpu)
4 cpu Xeon SMP x86_64 y n y 0 4 0 7 4 (percpu)
4 cpu Xeon SMP x86_64 y n m 0 4 0 7 4 (percpu)
4 cpu Xeon SMP x86_64 n n y 0 1 0 0 1 (global)
4 cpu Xeon SMP x86_64 n n m 0 1 0 0 1 (global)
4 cpu (2 node) Itanium NUMA ia64 y y m 2 4 1023 3 2 (pernode)
2 cpu (1 node) Itanium NUMA ia64 y y m 1 2 1023 1 1 (global)
* number of nodes and cpus from /sys/devices/system/
* hpni = value of highest_possible_node_id()
* hppi = value of highest_possible_processor_id()
Signed-off-by: Greg Banks <[email protected]>
---
net/sunrpc/svc.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
Index: linus-git/net/sunrpc/svc.c
===================================================================
--- linus-git.orig/net/sunrpc/svc.c 2006-08-01 15:38:30.000000000 +1000
+++ linus-git/net/sunrpc/svc.c 2006-08-02 13:20:35.979647782 +1000
@@ -116,7 +116,7 @@ fail:
static int
svc_pool_map_init_percpu(struct svc_pool_map *m)
{
- unsigned int maxpools = num_possible_cpus();
+ unsigned int maxpools = highest_possible_processor_id()+1;
unsigned int pidx = 0;
unsigned int cpu;
int err;
@@ -144,7 +144,7 @@ svc_pool_map_init_percpu(struct svc_pool
static int
svc_pool_map_init_pernode(struct svc_pool_map *m)
{
- unsigned int maxpools = num_possible_nodes();
+ unsigned int maxpools = highest_possible_node_id()+1;
unsigned int pidx = 0;
unsigned int node;
int err;
--
Greg Banks, R&D Software Engineer, SGI Australian Software Group.
I don't speak for SGI.