Commit 6ac5fff1 authored by Anton Blanchard's avatar Anton Blanchard Committed by Linus Torvalds

[PATCH] ppc64: Make NUMA code handle unexpected layouts

From: Nathan Lynch <nathanl@austin.ibm.com>

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

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: default avatarNathan Lynch <nathanl@austin.ibm.com>
Acked-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3d311cb2
......@@ -345,8 +345,6 @@ static int __init parse_numa_properties(void)
numa_domain = 0;
}
node_set_online(numa_domain);
if (max_domain < numa_domain)
max_domain = numa_domain;
......@@ -361,14 +359,19 @@ static int __init parse_numa_properties(void)
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 @@ static int __init parse_numa_properties(void)
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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment