From 74c7aa8b8581e0ba8d6d17c623b9279aaabbb0cf Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Tue, 20 Feb 2007 13:57:51 -0800 Subject: [PATCH] [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 Cc: Neil Brown Cc: Trond Myklebust Signed-off-by: Frederik Deweerdt Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- include/linux/nodemask.h | 4 ++-- mm/page_alloc.c | 35 +++++++++++++++++++++-------------- 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; #define node_possible(node) node_isset((node), node_possible_map) #define first_online_node first_node(node_online_map) #define next_online_node(nid) next_node((nid), node_online_map) -int highest_possible_node_id(void); +extern int nr_node_ids; #else #define num_online_nodes() 1 #define num_possible_nodes() 1 @@ -360,7 +360,7 @@ int highest_possible_node_id(void); #define node_possible(node) ((node) == 0) #define first_online_node 0 #define next_online_node(nid) (MAX_NUMNODES) -#define highest_possible_node_id() 0 +#define nr_node_ids 1 #endif #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, return i; } +#if MAX_NUMNODES > 1 +int nr_node_ids __read_mostly; +EXPORT_SYMBOL(nr_node_ids); + +/* + * Figure out the number of possible node ids. + */ +static void __init setup_nr_node_ids(void) +{ + unsigned int node; + unsigned int highest = 0; + + for_each_node_mask(node, node_possible_map) + highest = node; + nr_node_ids = highest + 1; +} +#else +static void __init setup_nr_node_ids(void) {} +#endif + #ifdef CONFIG_NUMA /* * 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) min_free_kbytes = 65536; setup_per_zone_pages_min(); setup_per_zone_lowmem_reserve(); + setup_nr_node_ids(); return 0; } module_init(init_per_zone_pages_min) @@ -3370,18 +3391,4 @@ EXPORT_SYMBOL(pfn_to_page); EXPORT_SYMBOL(page_to_pfn); #endif /* CONFIG_OUT_OF_LINE_PFN_TO_PAGE */ -#if MAX_NUMNODES > 1 -/* - * Find the highest possible node id. - */ -int highest_possible_node_id(void) -{ - unsigned int node; - unsigned int highest = 0; - for_each_node_mask(node, node_possible_map) - highest = node; - return highest; -} -EXPORT_SYMBOL(highest_possible_node_id); -#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: static int svc_pool_map_init_percpu(struct svc_pool_map *m) { - unsigned int maxpools = highest_possible_processor_id()+1; + unsigned int maxpools = highest_possible_processor_id() + 1; unsigned int pidx = 0; unsigned int cpu; int err; @@ -143,7 +143,7 @@ svc_pool_map_init_percpu(struct svc_pool_map *m) static int svc_pool_map_init_pernode(struct svc_pool_map *m) { - unsigned int maxpools = highest_possible_node_id()+1; + unsigned int maxpools = nr_node_ids; unsigned int pidx = 0; unsigned int node; int err; -- 2.34.1