diff options
author | Robin Holt <holt@sgi.com> | 2009-10-16 07:29:20 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-10-16 08:51:53 -0400 |
commit | 1d21e6e3ffad2939f9d8179817c6f9bc3b811b68 (patch) | |
tree | 394a3db2e734dc89411dcb8f71258dae57266b38 /arch/x86/include/asm/uv | |
parent | 93ae5012a79b11e7fc855b52c7ce1e16fe1540b0 (diff) |
x86, UV: Fix and clean up bau code to use uv_gpa_to_pnode()
Create an inline function to extract the pnode from a global
physical address and then convert the broadcast assist unit to
use the newly created uv_gpa_to_pnode function.
The open-coded code was wrong as well - it might explain a
few of our unexplained bau hangs.
Signed-off-by: Robin Holt <holt@sgi.com>
Acked-by: Cliff Whickman <cpw@sgi.com>
Cc: linux-mm@kvack.org
Cc: Jack Steiner <steiner@sgi.com>
LKML-Reference: <20091016112920.GZ8903@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/include/asm/uv')
-rw-r--r-- | arch/x86/include/asm/uv/uv_hub.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/x86/include/asm/uv/uv_hub.h b/arch/x86/include/asm/uv/uv_hub.h index 04eb6c958b9d..94908a08020a 100644 --- a/arch/x86/include/asm/uv/uv_hub.h +++ b/arch/x86/include/asm/uv/uv_hub.h | |||
@@ -114,7 +114,7 @@ | |||
114 | /* | 114 | /* |
115 | * The largest possible NASID of a C or M brick (+ 2) | 115 | * The largest possible NASID of a C or M brick (+ 2) |
116 | */ | 116 | */ |
117 | #define UV_MAX_NASID_VALUE (UV_MAX_NUMALINK_NODES * 2) | 117 | #define UV_MAX_NASID_VALUE (UV_MAX_NUMALINK_BLADES * 2) |
118 | 118 | ||
119 | struct uv_scir_s { | 119 | struct uv_scir_s { |
120 | struct timer_list timer; | 120 | struct timer_list timer; |
@@ -230,6 +230,20 @@ static inline unsigned long uv_gpa(void *v) | |||
230 | return uv_soc_phys_ram_to_gpa(__pa(v)); | 230 | return uv_soc_phys_ram_to_gpa(__pa(v)); |
231 | } | 231 | } |
232 | 232 | ||
233 | /* gnode -> pnode */ | ||
234 | static inline unsigned long uv_gpa_to_gnode(unsigned long gpa) | ||
235 | { | ||
236 | return gpa >> uv_hub_info->m_val; | ||
237 | } | ||
238 | |||
239 | /* gpa -> pnode */ | ||
240 | static inline int uv_gpa_to_pnode(unsigned long gpa) | ||
241 | { | ||
242 | unsigned long n_mask = (1UL << uv_hub_info->n_val) - 1; | ||
243 | |||
244 | return uv_gpa_to_gnode(gpa) & n_mask; | ||
245 | } | ||
246 | |||
233 | /* pnode, offset --> socket virtual */ | 247 | /* pnode, offset --> socket virtual */ |
234 | static inline void *uv_pnode_offset_to_vaddr(int pnode, unsigned long offset) | 248 | static inline void *uv_pnode_offset_to_vaddr(int pnode, unsigned long offset) |
235 | { | 249 | { |