[PATCH 4 of 4] knfsd: handle non-contiguous cpu and node numbers

From: Greg Banks
Date: Fri Aug 04 2006 - 01:35:46 EST


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 <gnb@xxxxxxxxxxxxxxxxx>
---

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.


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/