Handle holes in node mask in node fallback list setup
Subsystems (2)
PATCH 1/1 Handle holes in node mask in node fallback list setup
[Written by Linus, tested by AK]
Change the find_next_best_node algorithm to correctly skip over holes in the node online mask. Previously it would not handle missing nodes correctly and cause crashes at boot.
Signed-off-by Andi Kleen <[email protected]>
mm/page_alloc.c +11 -11
@@ -1541,29 +1541,29 @@ static int __initdata node_load[MAX_NUMN*/ 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))
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>