diff options
author | Russ Anderson <rja@sgi.com> | 2008-12-12 12:07:00 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-16 17:04:24 -0500 |
commit | c8182f0016fb65a721c4fbe487909a2d56178135 (patch) | |
tree | 3119151398cc5bef0fdaa7c8d6d50fd17ad8c3fe /arch/x86/kernel/bios_uv.c | |
parent | 189f67c4408806563a1f061f5c8bf184a6658477 (diff) |
sgi-xp: xpc needs to pass the physical address, not virtual
Impact: fix crash
xpc needs to pass the physical address, not virtual.
Testing uncovered this problem. The virtual address happens to work
most of the time due to the way bios was masking off the node bits.
Passing the physical address makes it work all of the time.
Signed-off-by: Russ Anderson <rja@sgi.com>
Acked-by: Dean Nelson <dcn@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/bios_uv.c')
-rw-r--r-- | arch/x86/kernel/bios_uv.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/arch/x86/kernel/bios_uv.c b/arch/x86/kernel/bios_uv.c index d22d0f1bbea0..2a0a2a3cac26 100644 --- a/arch/x86/kernel/bios_uv.c +++ b/arch/x86/kernel/bios_uv.c | |||
@@ -101,15 +101,13 @@ s64 uv_bios_get_sn_info(int fc, int *uvtype, long *partid, long *coher, | |||
101 | } | 101 | } |
102 | 102 | ||
103 | int | 103 | int |
104 | uv_bios_mq_watchlist_alloc(int blade, void *mq, unsigned int mq_size, | 104 | uv_bios_mq_watchlist_alloc(int blade, unsigned long addr, unsigned int mq_size, |
105 | unsigned long *intr_mmr_offset) | 105 | unsigned long *intr_mmr_offset) |
106 | { | 106 | { |
107 | union uv_watchlist_u size_blade; | 107 | union uv_watchlist_u size_blade; |
108 | unsigned long addr; | ||
109 | u64 watchlist; | 108 | u64 watchlist; |
110 | s64 ret; | 109 | s64 ret; |
111 | 110 | ||
112 | addr = (unsigned long)mq; | ||
113 | size_blade.size = mq_size; | 111 | size_blade.size = mq_size; |
114 | size_blade.blade = blade; | 112 | size_blade.blade = blade; |
115 | 113 | ||