2005-01-03 19:16:55

by William Lee Irwin III

[permalink] [raw]
Subject: [bootfix] pass used_node_mask by reference in 2.6.10-mm1

Without passing this parameter by reference, the changes to used_node_mask
are meaningless and do not affect the caller's copy.

This leads to boot-time failure. This proposed fix passes it by reference.


-- wli

Signed-off-by: William Irwin <[email protected]>


Index: mm1-2.6.10/mm/page_alloc.c
===================================================================
--- mm1-2.6.10.orig/mm/page_alloc.c 2005-01-03 10:37:58.000000000 -0800
+++ mm1-2.6.10/mm/page_alloc.c 2005-01-03 10:44:01.000000000 -0800
@@ -1377,7 +1377,7 @@
* on them otherwise.
* It returns -1 if no node is found.
*/
-static int __init find_next_best_node(int node, nodemask_t used_node_mask)
+static int __init find_next_best_node(int node, nodemask_t *used_node_mask)
{
int i, n, val;
int min_val = INT_MAX;
@@ -1390,11 +1390,11 @@
n = (node+i) % num_online_nodes();

/* Don't want a node to appear more than once */
- if (node_isset(n, used_node_mask))
+ if (node_isset(n, *used_node_mask))
continue;

/* Use the local node if we haven't already */
- if (!node_isset(node, used_node_mask)) {
+ if (!node_isset(node, *used_node_mask)) {
best_node = node;
break;
}
@@ -1418,7 +1418,7 @@
}

if (best_node >= 0)
- node_set(best_node, used_node_mask);
+ node_set(best_node, *used_node_mask);

return best_node;
}
@@ -1442,7 +1442,7 @@
load = num_online_nodes();
prev_node = local_node;
nodes_clear(used_mask);
- while ((node = find_next_best_node(local_node, used_mask)) >= 0) {
+ while ((node = find_next_best_node(local_node, &used_mask)) >= 0) {
/*
* We don't want to pressure a particular node.
* So adding penalty to the first node in same


2005-01-03 19:50:34

by William Lee Irwin III

[permalink] [raw]
Subject: Re: [bootfix] pass used_node_mask by reference in 2.6.10-mm1

On Mon, Jan 03, 2005 at 11:13:19AM -0800, William Lee Irwin III wrote:
> Without passing this parameter by reference, the changes to used_node_mask
> are meaningless and do not affect the caller's copy.
> This leads to boot-time failure. This proposed fix passes it by reference.

This proposed fix is an actual fix according to my own testing.

Without the patch applied, my quad em64t does not boot, and livelocks
prior to console_init().

With the patch applied, my quad em64 boots and runs normally.


-- wli

2005-01-03 20:44:42

by Jesse Barnes

[permalink] [raw]
Subject: Re: [bootfix] pass used_node_mask by reference in 2.6.10-mm1

On Monday, January 3, 2005 11:50 am, William Lee Irwin III wrote:
> On Mon, Jan 03, 2005 at 11:13:19AM -0800, William Lee Irwin III wrote:
> > Without passing this parameter by reference, the changes to
> > used_node_mask are meaningless and do not affect the caller's copy.
> > This leads to boot-time failure. This proposed fix passes it by
> > reference.
>
> This proposed fix is an actual fix according to my own testing.
>
> Without the patch applied, my quad em64t does not boot, and livelocks
> prior to console_init().
>
> With the patch applied, my quad em64 boots and runs normally.

Makes my Altix boot as well. Thanks for the fix.

Jesse

2005-01-07 01:11:37

by Matthew Dobson

[permalink] [raw]
Subject: Re: [bootfix] pass used_node_mask by reference in 2.6.10-mm1

On Mon, 2005-01-03 at 12:44, Jesse Barnes wrote:
> On Monday, January 3, 2005 11:50 am, William Lee Irwin III wrote:
> > On Mon, Jan 03, 2005 at 11:13:19AM -0800, William Lee Irwin III wrote:
> > > Without passing this parameter by reference, the changes to
> > > used_node_mask are meaningless and do not affect the caller's copy.
> > > This leads to boot-time failure. This proposed fix passes it by
> > > reference.
> >
> > This proposed fix is an actual fix according to my own testing.
> >
> > Without the patch applied, my quad em64t does not boot, and livelocks
> > prior to console_init().
> >
> > With the patch applied, my quad em64 boots and runs normally.
>
> Makes my Altix boot as well. Thanks for the fix.
>
> Jesse

Yep. Thanks for that, Bill! That was pretty stupid of me, although I
did manage to get a couple machines over here to boot with the broken
code...?

-Matt