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 /drivers/misc/sgi-xp/xpc_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 'drivers/misc/sgi-xp/xpc_uv.c')
-rw-r--r-- | drivers/misc/sgi-xp/xpc_uv.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c index 684b2dd17583..91a55b1b1037 100644 --- a/drivers/misc/sgi-xp/xpc_uv.c +++ b/drivers/misc/sgi-xp/xpc_uv.c | |||
@@ -119,16 +119,16 @@ xpc_gru_mq_watchlist_alloc_uv(struct xpc_gru_mq_uv *mq) | |||
119 | int ret; | 119 | int ret; |
120 | 120 | ||
121 | #if defined CONFIG_X86_64 | 121 | #if defined CONFIG_X86_64 |
122 | ret = uv_bios_mq_watchlist_alloc(mq->mmr_blade, mq->address, mq->order, | 122 | ret = uv_bios_mq_watchlist_alloc(mq->mmr_blade, uv_gpa(mq->address), |
123 | &mq->mmr_offset); | 123 | mq->order, &mq->mmr_offset); |
124 | if (ret < 0) { | 124 | if (ret < 0) { |
125 | dev_err(xpc_part, "uv_bios_mq_watchlist_alloc() failed, " | 125 | dev_err(xpc_part, "uv_bios_mq_watchlist_alloc() failed, " |
126 | "ret=%d\n", ret); | 126 | "ret=%d\n", ret); |
127 | return ret; | 127 | return ret; |
128 | } | 128 | } |
129 | #elif defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV | 129 | #elif defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV |
130 | ret = sn_mq_watchlist_alloc(mq->mmr_blade, mq->address, mq->order, | 130 | ret = sn_mq_watchlist_alloc(mq->mmr_blade, uv_gpa(mq->address), |
131 | &mq->mmr_offset); | 131 | mq->order, &mq->mmr_offset); |
132 | if (ret < 0) { | 132 | if (ret < 0) { |
133 | dev_err(xpc_part, "sn_mq_watchlist_alloc() failed, ret=%d\n", | 133 | dev_err(xpc_part, "sn_mq_watchlist_alloc() failed, ret=%d\n", |
134 | ret); | 134 | ret); |