From 6e9a5549b7b22166462fff7287c3b2376aad75b2 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Sun, 18 Jan 2004 18:49:49 -0800 Subject: [PATCH] [PATCH] sn: SAL interface clean up From: Pat Gefre SAL interface clean up --- arch/ia64/sn/io/sn2/klconflib.c | 1 - include/asm-ia64/sn/nodepda.h | 2 ++ include/asm-ia64/sn/sn_sal.h | 45 ++++++++++++++++++--------------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/arch/ia64/sn/io/sn2/klconflib.c b/arch/ia64/sn/io/sn2/klconflib.c index 65eaf8448a1f4..87901e694c1dc 100644 --- a/arch/ia64/sn/io/sn2/klconflib.c +++ b/arch/ia64/sn/io/sn2/klconflib.c @@ -32,7 +32,6 @@ #endif /* DEBUG_KLGRAPH */ lboard_t *root_lboard[MAX_COMPACT_NODES]; -u64 klgraph_addr[MAX_COMPACT_NODES]; static int hasmetarouter; diff --git a/include/asm-ia64/sn/nodepda.h b/include/asm-ia64/sn/nodepda.h index 281e62283accc..4df396cd46ed5 100644 --- a/include/asm-ia64/sn/nodepda.h +++ b/include/asm-ia64/sn/nodepda.h @@ -65,6 +65,8 @@ struct nodepda_s { nodepda_router_info_t **npda_rip_last; + spinlock_t bist_lock; + /* * The BTEs on this node are shared by the local cpus */ diff --git a/include/asm-ia64/sn/sn_sal.h b/include/asm-ia64/sn/sn_sal.h index 5b0ccbe3e0c5a..287a168f526ec 100644 --- a/include/asm-ia64/sn/sn_sal.h +++ b/include/asm-ia64/sn/sn_sal.h @@ -16,7 +16,9 @@ #include #include #include - +#include +#include + // SGI Specific Calls #define SN_SAL_POD_MODE 0x02000001 @@ -167,28 +169,23 @@ static inline u64 ia64_sn_get_klconfig_addr(nasid_t nasid) { struct ia64_sal_retval ret_stuff; - extern u64 klgraph_addr[]; int cnodeid; cnodeid = nasid_to_cnodeid(nasid); - if (klgraph_addr[cnodeid] == 0) { - ret_stuff.status = 0; - ret_stuff.v0 = 0; - ret_stuff.v1 = 0; - ret_stuff.v2 = 0; - SAL_CALL(ret_stuff, SN_SAL_GET_KLCONFIG_ADDR, (u64)nasid, 0, 0, 0, 0, 0, 0); - - /* - * We should panic if a valid cnode nasid does not produce - * a klconfig address. - */ - if (ret_stuff.status != 0) { - panic("ia64_sn_get_klconfig_addr: Returned error %lx\n", ret_stuff.status); - } - - klgraph_addr[cnodeid] = ret_stuff.v0; + ret_stuff.status = 0; + ret_stuff.v0 = 0; + ret_stuff.v1 = 0; + ret_stuff.v2 = 0; + SAL_CALL(ret_stuff, SN_SAL_GET_KLCONFIG_ADDR, (u64)nasid, 0, 0, 0, 0, 0, 0); + + /* + * We should panic if a valid cnode nasid does not produce + * a klconfig address. + */ + if (ret_stuff.status != 0) { + panic("ia64_sn_get_klconfig_addr: Returned error %lx\n", ret_stuff.status); } - return(klgraph_addr[cnodeid]); + return(ret_stuff.v0); } /* @@ -597,8 +594,16 @@ static inline int sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array) { struct ia64_sal_retval ret_stuff; - SAL_CALL(ret_stuff, SN_SAL_MEMPROTECT, paddr, len, nasid_array, + int cnodeid; + unsigned long irq_flags; + + cnodeid = nasid_to_cnodeid(get_node_number(paddr)); + spin_lock(&NODEPDA(cnodeid)->bist_lock); + local_irq_save(irq_flags); + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_MEMPROTECT, paddr, len, nasid_array, perms, 0, 0, 0); + local_irq_restore(irq_flags); + spin_unlock(&NODEPDA(cnodeid)->bist_lock); return ret_stuff.status; } #define SN_MEMPROT_ACCESS_CLASS_0 0x14a080 -- 2.53.0