From f315735ab46c773bccca16964dd3997d939a7b54 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 17 Feb 2006 20:38:21 +0100 Subject: [PATCH] --- yaml --- r: 20455 b: refs/heads/master c: 4cf808eb443ead42777a0230b73aec0cee7fb298 h: refs/heads/master i: 20453: 4caf64827e30138aee55aa7f450fd34c5c53018a 20451: 74026cf12d1139fb6ec62a3c5bfaf1afe08d2d72 20447: d1b506209b7c5d78f5541e48f6ef080eb9d9958f v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 23f5f7fa0719..c344757f99cb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cfe91f9ce297e23e6fbdf61c02bdd8ab9af7c8a8 +refs/heads/master: 4cf808eb443ead42777a0230b73aec0cee7fb298 diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index 62c122528587..208812b25597 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/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))