]> git.hungrycats.org Git - linux/commitdiff
[PATCH] sn: SAL interface clean up
authorAndrew Morton <akpm@osdl.org>
Mon, 19 Jan 2004 02:49:49 +0000 (18:49 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Mon, 19 Jan 2004 02:49:49 +0000 (18:49 -0800)
From: Pat Gefre <pfg@sgi.com>

SAL interface clean up

arch/ia64/sn/io/sn2/klconflib.c
include/asm-ia64/sn/nodepda.h
include/asm-ia64/sn/sn_sal.h

index 65eaf8448a1f4d83bef4c43acfa882311c846c33..87901e694c1dc024ccce0cf6aad8a31985258b70 100644 (file)
@@ -32,7 +32,6 @@
 #endif /* DEBUG_KLGRAPH */
 
 lboard_t *root_lboard[MAX_COMPACT_NODES];
-u64 klgraph_addr[MAX_COMPACT_NODES];
 static int hasmetarouter;
 
 
index 281e62283acccac44a1a36a49d32a24adefac149..4df396cd46ed5f8a9c12dfd3636406f7d2e2ef29 100644 (file)
@@ -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
         */
index 5b0ccbe3e0c5ad72b0fe26d82e48536024826cd8..287a168f526ec5744e7b26fafff8c6e5881eae4b 100644 (file)
@@ -16,7 +16,9 @@
 #include <asm/sal.h>
 #include <asm/sn/sn_cpuid.h>
 #include <asm/sn/arch.h>
-
+#include <asm/sn/nodepda.h>
+#include <asm/sn/klconfig.h>
+        
 
 // 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