aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJack Steiner <steiner@sgi.com>2009-04-20 09:25:31 -0400
committerIngo Molnar <mingo@elte.hu>2009-04-20 12:09:18 -0400
commitfc61e6636d13eb3a23eb29b4327eeee9de0ef3bc (patch)
treef029a11ae3e98775302455a57bcbe45bd1062dea /arch
parent62d170290979e0bb805d969cca4ea852bdd45260 (diff)
x86/uv: fix for no memory at paddr 0
Fix endcase where the memory at physical address 0 does not really exist AND one of the sockets on blade 0 has no active cpus. The memory that _appears_ to be at physical address 0 is actually memory that located at a different address but has been remapped by the chipset so that it appears to be at physical address 0. When determining the UV pnode, the algorithm for determining the pnode incorrectly used the relocated physical address instead of the actual (global) address. [ Impact: boot failure on partitioned systems ] Signed-off-by: Jack Steiner <steiner@sgi.com> LKML-Reference: <20090420132530.GA23156@sgi.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/apic/x2apic_uv_x.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index d6712334ce4b..2bda69352976 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -652,6 +652,7 @@ void __init uv_system_init(void)
652 if (uv_node_to_blade[nid] >= 0) 652 if (uv_node_to_blade[nid] >= 0)
653 continue; 653 continue;
654 paddr = node_start_pfn(nid) << PAGE_SHIFT; 654 paddr = node_start_pfn(nid) << PAGE_SHIFT;
655 paddr = uv_soc_phys_ram_to_gpa(paddr);
655 pnode = (paddr >> m_val) & pnode_mask; 656 pnode = (paddr >> m_val) & pnode_mask;
656 blade = boot_pnode_to_blade(pnode); 657 blade = boot_pnode_to_blade(pnode);
657 uv_node_to_blade[nid] = blade; 658 uv_node_to_blade[nid] = blade;