aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@sgi.com>2007-02-20 16:57:51 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-20 20:10:13 -0500
commit74c7aa8b8581e0ba8d6d17c623b9279aaabbb0cf (patch)
treee8bfdd1d4bd5a7d4ee0e0bbf83c45c9f2b5deb59
parent5ec553a90448b3edbd26c1acc72464f877614bfa (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.h4
-rw-r--r--mm/page_alloc.c35
-rw-r--r--net/sunrpc/svc.c4
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)
355int highest_possible_node_id(void); 355extern 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
668int nr_node_ids __read_mostly;
669EXPORT_SYMBOL(nr_node_ids);
670
671/*
672 * Figure out the number of possible node ids.
673 */
674static 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
684static 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}
3174module_init(init_per_zone_pages_min) 3195module_init(init_per_zone_pages_min)
@@ -3370,18 +3391,4 @@ EXPORT_SYMBOL(pfn_to_page);
3370EXPORT_SYMBOL(page_to_pfn); 3391EXPORT_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 */
3377int 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}
3386EXPORT_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:
115static int 115static int
116svc_pool_map_init_percpu(struct svc_pool_map *m) 116svc_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)
143static int 143static int
144svc_pool_map_init_pernode(struct svc_pool_map *m) 144svc_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;