From 643bdfbcf9aee28ce6e5a3678326581f7c1cb326 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 17 Feb 2006 13:27:40 -0800 Subject: [PATCH] --- yaml --- r: 20470 b: refs/heads/master c: 00ab2f3df33dd3e649904765767dd87ffbcb3acf h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index e83708e86fb7..5af4686bc767 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f5e2a7b22e7d7dfda8794906d0fddeaaa09bb944 +refs/heads/master: 00ab2f3df33dd3e649904765767dd87ffbcb3acf 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))