[PATCH] ppc64: Make NUMA code handle unexpected layouts

From: Anton Blanchard
Date: Mon Jan 10 2005 - 10:25:23 EST



From: Nathan Lynch <nathanl@xxxxxxxxxxxxxx>

Ran into this on a 4GB partition - all but about ~300MB was thrown away.

Does this look ok? It works for me, but I've not tested on firmware
without the bug.

Fall back to non-numa setup upon discovering unexpected memory layout
as presented by firmware, instead of throwing away regions.

Signed-off-by: Nathan Lynch <nathanl@xxxxxxxxxxxxxx>
Acked-by: Anton Blanchard <anton@xxxxxxxxx>

diff -puN arch/ppc64/mm/numa.c~numa_broke_fix arch/ppc64/mm/numa.c
--- foobar2/arch/ppc64/mm/numa.c~numa_broke_fix 2005-01-10 23:36:39.922337007 +1100
+++ foobar2-anton/arch/ppc64/mm/numa.c 2005-01-10 23:46:46.069205815 +1100
@@ -345,8 +345,6 @@ new_range:
numa_domain = 0;
}

- node_set_online(numa_domain);
-
if (max_domain < numa_domain)
max_domain = numa_domain;

@@ -361,14 +359,19 @@ new_range:
init_node_data[numa_domain].node_start_pfn +
init_node_data[numa_domain].node_spanned_pages;
if (shouldstart != (start / PAGE_SIZE)) {
- printk(KERN_ERR "WARNING: Hole in node, "
- "disabling region start %lx "
- "length %lx\n", start, size);
- continue;
+ /* Revert to non-numa for now */
+ printk(KERN_ERR
+ "WARNING: Unexpected node layout: "
+ "region start %lx length %lx\n",
+ start, size);
+ printk(KERN_ERR "NUMA is disabled\n");
+ goto err;
}
init_node_data[numa_domain].node_spanned_pages +=
size / PAGE_SIZE;
} else {
+ node_set_online(numa_domain);
+
init_node_data[numa_domain].node_start_pfn =
start / PAGE_SIZE;
init_node_data[numa_domain].node_spanned_pages =
@@ -388,6 +391,14 @@ new_range:
node_set_online(i);

return 0;
+err:
+ /* Something has gone wrong; revert any setup we've done */
+ for_each_node(i) {
+ node_set_offline(i);
+ init_node_data[i].node_start_pfn = 0;
+ init_node_data[i].node_spanned_pages = 0;
+ }
+ return -1;
}

static void __init setup_nonnuma(void)
_

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/