diff options
author | Steve French <sfrench@us.ibm.com> | 2006-02-18 15:07:18 +0000 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2006-02-18 15:07:18 +0000 |
commit | e601ef22bc5ec9332c8d785533895ee81c834b8a (patch) | |
tree | 4685a666fe2a553dccdfe7b4b3f88816d075b29e /mm/page_alloc.c | |
parent | 27754b34600770beb38e3ae12cb3f345f02e3797 (diff) | |
parent | bd71c2b17468a2531fb4c81ec1d73520845e97e1 (diff) | |
download | blackbird-op-linux-e601ef22bc5ec9332c8d785533895ee81c834b8a.tar.gz blackbird-op-linux-e601ef22bc5ec9332c8d785533895ee81c834b8a.zip |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 62c122528587..208812b25597 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1541,29 +1541,29 @@ static int __initdata node_load[MAX_NUMNODES]; */ static int __init find_next_best_node(int node, nodemask_t *used_node_mask) { - int i, n, val; + int n, val; int min_val = INT_MAX; int best_node = -1; - for_each_online_node(i) { - cpumask_t tmp; + /* Use the local node if we haven't already */ + if (!node_isset(node, *used_node_mask)) { + node_set(node, *used_node_mask); + return node; + } - /* Start from local node */ - n = (node+i) % num_online_nodes(); + for_each_online_node(n) { + cpumask_t tmp; /* Don't want a node to appear more than once */ if (node_isset(n, *used_node_mask)) continue; - /* Use the local node if we haven't already */ - if (!node_isset(node, *used_node_mask)) { - best_node = node; - break; - } - /* Use the distance array to find the distance */ val = node_distance(node, n); + /* Penalize nodes under us ("prefer the next node") */ + val += (n < node); + /* Give preference to headless and unused nodes */ tmp = node_to_cpumask(n); if (!cpus_empty(tmp)) |