diff options
author | Christoph Lameter <clameter@sgi.com> | 2007-02-20 16:57:51 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-20 20:10:13 -0500 |
commit | 74c7aa8b8581e0ba8d6d17c623b9279aaabbb0cf (patch) | |
tree | e8bfdd1d4bd5a7d4ee0e0bbf83c45c9f2b5deb59 | |
parent | 5ec553a90448b3edbd26c1acc72464f877614bfa (diff) |
[PATCH] Replace highest_possible_node_id() with nr_node_ids
highest_possible_node_id() is currently used to calculate the last possible
node idso that the network subsystem can figure out how to size per node
arrays.
I think having the ability to determine the maximum amount of nodes in a
system at runtime is useful but then we should name this entry
correspondingly, it should return the number of node_ids, and the the value
needs to be setup only once on bootup. The node_possible_map does not
change after bootup.
This patch introduces nr_node_ids and replaces the use of
highest_possible_node_id(). nr_node_ids is calculated on bootup when the
page allocators pagesets are initialized.
[deweerdt@free.fr: fix oops]
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Cc: Neil Brown <neilb@suse.de>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Frederik Deweerdt <frederik.deweerdt@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | include/linux/nodemask.h | 4 | ||||
-rw-r--r-- | mm/page_alloc.c | 35 | ||||
-rw-r--r-- | net/sunrpc/svc.c | 4 |
3 files changed, 25 insertions, 18 deletions
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index b1063e9cdb1b..52c54a5720f3 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h | |||
@@ -352,7 +352,7 @@ extern nodemask_t node_possible_map; | |||
352 | #define node_possible(node) node_isset((node), node_possible_map) | 352 | #define node_possible(node) node_isset((node), node_possible_map) |
353 | #define first_online_node first_node(node_online_map) | 353 | #define first_online_node first_node(node_online_map) |
354 | #define next_online_node(nid) next_node((nid), node_online_map) | 354 | #define next_online_node(nid) next_node((nid), node_online_map) |
355 | int highest_possible_node_id(void); | 355 | extern int nr_node_ids; |
356 | #else | 356 | #else |
357 | #define num_online_nodes() 1 | 357 | #define num_online_nodes() 1 |
358 | #define num_possible_nodes() 1 | 358 | #define num_possible_nodes() 1 |
@@ -360,7 +360,7 @@ int highest_possible_node_id(void); | |||
360 | #define node_possible(node) ((node) == 0) | 360 | #define node_possible(node) ((node) == 0) |
361 | #define first_online_node 0 | 361 | #define first_online_node 0 |
362 | #define next_online_node(nid) (MAX_NUMNODES) | 362 | #define next_online_node(nid) (MAX_NUMNODES) |
363 | #define highest_possible_node_id() 0 | 363 | #define nr_node_ids 1 |
364 | #endif | 364 | #endif |
365 | 365 | ||
366 | #define any_online_node(mask) \ | 366 | #define any_online_node(mask) \ |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d461b23a27a1..f66538b3c31b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -664,6 +664,26 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order, | |||
664 | return i; | 664 | return i; |
665 | } | 665 | } |
666 | 666 | ||
667 | #if MAX_NUMNODES > 1 | ||
668 | int nr_node_ids __read_mostly; | ||
669 | EXPORT_SYMBOL(nr_node_ids); | ||
670 | |||
671 | /* | ||
672 | * Figure out the number of possible node ids. | ||
673 | */ | ||
674 | static void __init setup_nr_node_ids(void) | ||
675 | { | ||
676 | unsigned int node; | ||
677 | unsigned int highest = 0; | ||
678 | |||
679 | for_each_node_mask(node, node_possible_map) | ||
680 | highest = node; | ||
681 | nr_node_ids = highest + 1; | ||
682 | } | ||
683 | #else | ||
684 | static void __init setup_nr_node_ids(void) {} | ||
685 | #endif | ||
686 | |||
667 | #ifdef CONFIG_NUMA | 687 | #ifdef CONFIG_NUMA |
668 | /* | 688 | /* |
669 | * Called from the slab reaper to drain pagesets on a particular node that | 689 | * Called from the slab reaper to drain pagesets on a particular node that |
@@ -3169,6 +3189,7 @@ static int __init init_per_zone_pages_min(void) | |||
3169 | min_free_kbytes = 65536; | 3189 | min_free_kbytes = 65536; |
3170 | setup_per_zone_pages_min(); | 3190 | setup_per_zone_pages_min(); |
3171 | setup_per_zone_lowmem_reserve(); | 3191 | setup_per_zone_lowmem_reserve(); |
3192 | setup_nr_node_ids(); | ||
3172 | return 0; | 3193 | return 0; |
3173 | } | 3194 | } |
3174 | module_init(init_per_zone_pages_min) | 3195 | module_init(init_per_zone_pages_min) |
@@ -3370,18 +3391,4 @@ EXPORT_SYMBOL(pfn_to_page); | |||
3370 | EXPORT_SYMBOL(page_to_pfn); | 3391 | EXPORT_SYMBOL(page_to_pfn); |
3371 | #endif /* CONFIG_OUT_OF_LINE_PFN_TO_PAGE */ | 3392 | #endif /* CONFIG_OUT_OF_LINE_PFN_TO_PAGE */ |
3372 | 3393 | ||
3373 | #if MAX_NUMNODES > 1 | ||
3374 | /* | ||
3375 | * Find the highest possible node id. | ||
3376 | */ | ||
3377 | int highest_possible_node_id(void) | ||
3378 | { | ||
3379 | unsigned int node; | ||
3380 | unsigned int highest = 0; | ||
3381 | 3394 | ||
3382 | for_each_node_mask(node, node_possible_map) | ||
3383 | highest = node; | ||
3384 | return highest; | ||
3385 | } | ||
3386 | EXPORT_SYMBOL(highest_possible_node_id); | ||
3387 | #endif | ||
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 4ab137403e1a..232a99715ef2 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -115,7 +115,7 @@ fail: | |||
115 | static int | 115 | static int |
116 | svc_pool_map_init_percpu(struct svc_pool_map *m) | 116 | svc_pool_map_init_percpu(struct svc_pool_map *m) |
117 | { | 117 | { |
118 | unsigned int maxpools = highest_possible_processor_id()+1; | 118 | unsigned int maxpools = highest_possible_processor_id() + 1; |
119 | unsigned int pidx = 0; | 119 | unsigned int pidx = 0; |
120 | unsigned int cpu; | 120 | unsigned int cpu; |
121 | int err; | 121 | int err; |
@@ -143,7 +143,7 @@ svc_pool_map_init_percpu(struct svc_pool_map *m) | |||
143 | static int | 143 | static int |
144 | svc_pool_map_init_pernode(struct svc_pool_map *m) | 144 | svc_pool_map_init_pernode(struct svc_pool_map *m) |
145 | { | 145 | { |
146 | unsigned int maxpools = highest_possible_node_id()+1; | 146 | unsigned int maxpools = nr_node_ids; |
147 | unsigned int pidx = 0; | 147 | unsigned int pidx = 0; |
148 | unsigned int node; | 148 | unsigned int node; |
149 | int err; | 149 | int err; |