提交 74c7aa8b 编写于 作者: C Christoph Lameter 提交者: Linus Torvalds

[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: NChristoph Lameter <clameter@sgi.com>
Cc: Neil Brown <neilb@suse.de>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: NFrederik Deweerdt <frederik.deweerdt@gmail.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 5ec553a9
...@@ -352,7 +352,7 @@ extern nodemask_t node_possible_map; ...@@ -352,7 +352,7 @@ extern nodemask_t node_possible_map;
#define node_possible(node) node_isset((node), node_possible_map) #define node_possible(node) node_isset((node), node_possible_map)
#define first_online_node first_node(node_online_map) #define first_online_node first_node(node_online_map)
#define next_online_node(nid) next_node((nid), 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 #else
#define num_online_nodes() 1 #define num_online_nodes() 1
#define num_possible_nodes() 1 #define num_possible_nodes() 1
...@@ -360,7 +360,7 @@ int highest_possible_node_id(void); ...@@ -360,7 +360,7 @@ int highest_possible_node_id(void);
#define node_possible(node) ((node) == 0) #define node_possible(node) ((node) == 0)
#define first_online_node 0 #define first_online_node 0
#define next_online_node(nid) (MAX_NUMNODES) #define next_online_node(nid) (MAX_NUMNODES)
#define highest_possible_node_id() 0 #define nr_node_ids 1
#endif #endif
#define any_online_node(mask) \ #define any_online_node(mask) \
......
...@@ -664,6 +664,26 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order, ...@@ -664,6 +664,26 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
return i; 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 #ifdef CONFIG_NUMA
/* /*
* Called from the slab reaper to drain pagesets on a particular node that * 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,6 +3189,7 @@ static int __init init_per_zone_pages_min(void)
min_free_kbytes = 65536; min_free_kbytes = 65536;
setup_per_zone_pages_min(); setup_per_zone_pages_min();
setup_per_zone_lowmem_reserve(); setup_per_zone_lowmem_reserve();
setup_nr_node_ids();
return 0; return 0;
} }
module_init(init_per_zone_pages_min) module_init(init_per_zone_pages_min)
...@@ -3370,18 +3391,4 @@ EXPORT_SYMBOL(pfn_to_page); ...@@ -3370,18 +3391,4 @@ EXPORT_SYMBOL(pfn_to_page);
EXPORT_SYMBOL(page_to_pfn); EXPORT_SYMBOL(page_to_pfn);
#endif /* CONFIG_OUT_OF_LINE_PFN_TO_PAGE */ #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
...@@ -115,7 +115,7 @@ svc_pool_map_alloc_arrays(struct svc_pool_map *m, unsigned int maxpools) ...@@ -115,7 +115,7 @@ svc_pool_map_alloc_arrays(struct svc_pool_map *m, unsigned int maxpools)
static int static int
svc_pool_map_init_percpu(struct svc_pool_map *m) 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 pidx = 0;
unsigned int cpu; unsigned int cpu;
int err; int err;
...@@ -143,7 +143,7 @@ svc_pool_map_init_percpu(struct svc_pool_map *m) ...@@ -143,7 +143,7 @@ svc_pool_map_init_percpu(struct svc_pool_map *m)
static int static int
svc_pool_map_init_pernode(struct svc_pool_map *m) 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 pidx = 0;
unsigned int node; unsigned int node;
int err; int err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册