aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/uv
diff options
context:
space:
mode:
authorRobin Holt <holt@sgi.com>2009-10-16 07:29:20 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-16 08:51:53 -0400
commit1d21e6e3ffad2939f9d8179817c6f9bc3b811b68 (patch)
tree394a3db2e734dc89411dcb8f71258dae57266b38 /arch/x86/include/asm/uv
parent93ae5012a79b11e7fc855b52c7ce1e16fe1540b0 (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.h16
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
119struct uv_scir_s { 119struct 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 */
234static inline unsigned long uv_gpa_to_gnode(unsigned long gpa)
235{
236 return gpa >> uv_hub_info->m_val;
237}
238
239/* gpa -> pnode */
240static 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 */
234static inline void *uv_pnode_offset_to_vaddr(int pnode, unsigned long offset) 248static inline void *uv_pnode_offset_to_vaddr(int pnode, unsigned long offset)
235{ 249{