From: David Rientjes Make sure we do not have any current active ranges (most notably from SRAT) registered when we are setting up NUMA emulation. Otherwise, we'll lose the new fake node ID's if the smaller emulated nodes map onto existing registered active ranges with physical node ID's. Signed-off-by: David Rientjes Cc: Andi Kleen Cc: Paul Jackson Cc: Christoph Lameter Signed-off-by: Andrew Morton --- arch/x86_64/mm/k8topology.c | 7 ++++--- arch/x86_64/mm/numa.c | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff -puN arch/x86_64/mm/k8topology.c~x86_64-configurable-fake-numa-node-sizes-fix arch/x86_64/mm/k8topology.c --- a/arch/x86_64/mm/k8topology.c~x86_64-configurable-fake-numa-node-sizes-fix +++ a/arch/x86_64/mm/k8topology.c @@ -149,9 +149,10 @@ int __init k8_scan_nodes(unsigned long s nodes[nodeid].start = base; nodes[nodeid].end = limit; - e820_register_active_regions(nodeid, - nodes[nodeid].start >> PAGE_SHIFT, - nodes[nodeid].end >> PAGE_SHIFT); + if (!fake) + e820_register_active_regions(nodeid, + nodes[nodeid].start >> PAGE_SHIFT, + nodes[nodeid].end >> PAGE_SHIFT); prevbase = base; diff -puN arch/x86_64/mm/numa.c~x86_64-configurable-fake-numa-node-sizes-fix arch/x86_64/mm/numa.c --- a/arch/x86_64/mm/numa.c~x86_64-configurable-fake-numa-node-sizes-fix +++ a/arch/x86_64/mm/numa.c @@ -432,6 +432,12 @@ out: "disabled.\n"); return -1; } + + /* + * We need to vacate all active ranges that may have been registered by + * SRAT. + */ + remove_all_active_ranges(); for_each_online_node(i) { e820_register_active_regions(i, nodes[i].start >> PAGE_SHIFT, nodes[i].end >> PAGE_SHIFT); _