---
 arch/ia64/kernel/setup.c |    1 +
 arch/x86/kernel/setup.c  |    4 ++++
 arch/x86/mm/numa.c       |   13 ++++++++++---
 3 files changed, 15 insertions(+), 3 deletions(-)

Index: linux-2.6/arch/x86/kernel/setup.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/setup.c
+++ linux-2.6/arch/x86/kernel/setup.c
@@ -809,6 +809,8 @@ static void __init trim_low_memory_range
 
 void __init setup_arch(char **cmdline_p)
 {
+	int i;
+
 	memblock_reserve(__pa_symbol(_text),
 			 (unsigned long)__bss_stop - (unsigned long)_text);
 
@@ -1063,6 +1065,8 @@ void __init setup_arch(char **cmdline_p)
 	 */
 	acpi_boot_table_init();
 	early_acpi_boot_init();
+	for (i = 0; i < MAX_LOCAL_APIC; i++)
+		set_apicid_to_node(i, NUMA_NO_NODE);
 	early_parse_srat();
 
 #ifdef CONFIG_X86_32
Index: linux-2.6/arch/x86/mm/numa.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/numa.c
+++ linux-2.6/arch/x86/mm/numa.c
@@ -556,9 +556,6 @@ static int __init numa_init(int (*init_f
 	int i;
 	int ret;
 
-	for (i = 0; i < MAX_LOCAL_APIC; i++)
-		set_apicid_to_node(i, NUMA_NO_NODE);
-
 	/*
 	 * Do not clear numa_nodes_parsed or zero numa_meminfo here, because
 	 * SRAT was parsed earlier in early_parse_srat().
@@ -624,6 +621,8 @@ static int __init dummy_numa_init(void)
  */
 void __init x86_numa_init(void)
 {
+	int i;
+
 	if (!numa_off) {
 #ifdef CONFIG_X86_NUMAQ
 		if (!numa_init(numaq_numa_init))
@@ -634,11 +633,19 @@ void __init x86_numa_init(void)
 			return;
 #endif
 #ifdef CONFIG_AMD_NUMA
+		for (i = 0; i < MAX_LOCAL_APIC; i++)
+			set_apicid_to_node(i, NUMA_NO_NODE);
+		nodes_clear(numa_nodes_parsed);
+		memset(&numa_meminfo, 0, sizeof(numa_meminfo));
 		if (!numa_init(amd_numa_init))
 			return;
 #endif
 	}
 
+	for (i = 0; i < MAX_LOCAL_APIC; i++)
+		set_apicid_to_node(i, NUMA_NO_NODE);
+	nodes_clear(numa_nodes_parsed);
+	memset(&numa_meminfo, 0, sizeof(numa_meminfo));
 	numa_init(dummy_numa_init);
 }
 
Index: linux-2.6/arch/ia64/kernel/setup.c
===================================================================
--- linux-2.6.orig/arch/ia64/kernel/setup.c
+++ linux-2.6/arch/ia64/kernel/setup.c
@@ -558,6 +558,7 @@ setup_arch (char **cmdline_p)
 	acpi_table_init();
 	early_acpi_boot_init();
 # ifdef CONFIG_ACPI_NUMA
+	early_parse_srat();
 	acpi_numa_init();
 #  ifdef CONFIG_ACPI_HOTPLUG_CPU
 	prefill_possible_map();
