[IA64-SGI] move nodepda pointer out of pda
authorDean Nelson <dcn@sgi.com>
Tue, 22 Mar 2005 23:00:00 +0000 (16:00 -0700)
committerTony Luck <tony.luck@intel.com>
Wed, 4 May 2005 17:18:32 +0000 (10:18 -0700)
Remove the p_nodepda and p_subnodepda pointers from the pda_s structure.
And then define a new per-cpu pointer to the nodepda and export it so
that it can be accessed by kernel modules.

Signed-off-by: Dean Nelson <dcn@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/sn/kernel/setup.c
include/asm-ia64/sn/nodepda.h
include/asm-ia64/sn/pda.h
include/asm-ia64/sn/sn_cpuid.h

index fea71ee891eb13c925274adf06d76fd8071ce15f..4fb44984afe61198a5f3c4c62795a6ced91eb265 100644 (file)
@@ -76,6 +76,9 @@ EXPORT_PER_CPU_SYMBOL(__sn_hub_info);
 DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]);
 EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid);
 
+DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda);
+EXPORT_PER_CPU_SYMBOL(__sn_nodepda);
+
 partid_t sn_partid = -1;
 EXPORT_SYMBOL(sn_partid);
 char sn_system_serial_number_string[128];
@@ -480,7 +483,8 @@ void __init sn_cpu_init(void)
 
        cnode = nasid_to_cnodeid(nasid);
 
-       pda->p_nodepda = nodepdaindr[cnode];
+       sn_nodepda = nodepdaindr[cnode];
+
        pda->led_address =
            (typeof(pda->led_address)) (LED0 + (slice << LED_CPU_SHIFT));
        pda->led_state = LED_ALWAYS_SET;
@@ -626,7 +630,8 @@ nasid_slice_to_cpuid(int nasid, int slice)
        long cpu;
        
        for (cpu=0; cpu < NR_CPUS; cpu++) 
-               if (nodepda->phys_cpuid[cpu].nasid == nasid && nodepda->phys_cpuid[cpu].slice == slice)
+               if (cpuid_to_nasid(cpu) == nasid &&
+                                       cpuid_to_slice(cpu) == slice)
                        return cpu;
 
        return -1;
index 13cc1002b29493fa05a4adf871016841b691b62e..7138b1eafd6b46d48a5f83f10fc7606eb1885ef7 100644 (file)
@@ -13,7 +13,6 @@
 #include <asm/irq.h>
 #include <asm/sn/arch.h>
 #include <asm/sn/intr.h>
-#include <asm/sn/pda.h>
 #include <asm/sn/bte.h>
 
 /*
@@ -67,20 +66,18 @@ typedef struct nodepda_s nodepda_t;
  * The next set of definitions provides this.
  * Routines are expected to use 
  *
- *     nodepda                 -> to access node PDA for the node on which code is running
- *     subnodepda              -> to access subnode PDA for the subnode on which code is running
- *
- *     NODEPDA(cnode)          -> to access node PDA for cnodeid 
- *     SUBNODEPDA(cnode,sn)    -> to access subnode PDA for cnodeid/subnode
+ *     sn_nodepda   - to access node PDA for the node on which code is running
+ *     NODEPDA(cnodeid)   - to access node PDA for cnodeid
  */
 
-#define        nodepda         pda->p_nodepda          /* Ptr to this node's PDA */
-#define        NODEPDA(cnode)          (nodepda->pernode_pdaindr[cnode])
+DECLARE_PER_CPU(struct nodepda_s *, __sn_nodepda);
+#define sn_nodepda             (__get_cpu_var(__sn_nodepda))
+#define        NODEPDA(cnodeid)        (sn_nodepda->pernode_pdaindr[cnodeid])
 
 /*
  * Check if given a compact node id the corresponding node has all the
  * cpus disabled. 
  */
-#define is_headless_node(cnode)                (nr_cpus_node(cnode) == 0)
+#define is_headless_node(cnodeid)      (nr_cpus_node(cnodeid) == 0)
 
 #endif /* _ASM_IA64_SN_NODEPDA_H */
index a5340cfe9bab9a499e2c9c89c2c0f3ba4130247c..ea5590c76ca48eafc3505ced25ef048d1d8d1b0e 100644 (file)
 
 typedef struct pda_s {
 
-       /* Having a pointer in the begining of PDA tends to increase
-        * the chance of having this pointer in cache. (Yes something
-        * else gets pushed out). Doing this reduces the number of memory
-        * access to all nodepda variables to be one
-        */
-       struct nodepda_s *p_nodepda;            /* Pointer to Per node PDA */
-       struct subnodepda_s *p_subnodepda;      /* Pointer to CPU  subnode PDA */
-
        /*
         * Support for SN LEDs
         */
index 6b44290aaab458857da358a37931741aeca7d125..20b3001876698992860772fcef3edfc6f62040d3 100644 (file)
  * NOTE: on non-MP systems, only cpuid 0 exists
  */
 
-extern short physical_node_map[];                      /* indexed by nasid to get cnode */
+extern short physical_node_map[];      /* indexed by nasid to get cnode */
 
 /*
  * Macros for retrieving info about current cpu
  */
-#define get_nasid()                    (nodepda->phys_cpuid[smp_processor_id()].nasid)
-#define get_subnode()                  (nodepda->phys_cpuid[smp_processor_id()].subnode)
-#define get_slice()                    (nodepda->phys_cpuid[smp_processor_id()].slice)
-#define get_cnode()                    (nodepda->phys_cpuid[smp_processor_id()].cnode)
-#define get_sapicid()                  ((ia64_getreg(_IA64_REG_CR_LID) >> 16) & 0xffff)
+#define get_nasid()    (sn_nodepda->phys_cpuid[smp_processor_id()].nasid)
+#define get_subnode()  (sn_nodepda->phys_cpuid[smp_processor_id()].subnode)
+#define get_slice()    (sn_nodepda->phys_cpuid[smp_processor_id()].slice)
+#define get_cnode()    (sn_nodepda->phys_cpuid[smp_processor_id()].cnode)
+#define get_sapicid()  ((ia64_getreg(_IA64_REG_CR_LID) >> 16) & 0xffff)
 
 /*
  * Macros for retrieving info about an arbitrary cpu
  *     cpuid - logical cpu id
  */
-#define cpuid_to_nasid(cpuid)          (nodepda->phys_cpuid[cpuid].nasid)
-#define cpuid_to_subnode(cpuid)                (nodepda->phys_cpuid[cpuid].subnode)
-#define cpuid_to_slice(cpuid)          (nodepda->phys_cpuid[cpuid].slice)
+#define cpuid_to_nasid(cpuid)          (sn_nodepda->phys_cpuid[cpuid].nasid)
+#define cpuid_to_subnode(cpuid)                (sn_nodepda->phys_cpuid[cpuid].subnode)
+#define cpuid_to_slice(cpuid)          (sn_nodepda->phys_cpuid[cpuid].slice)
 #define cpuid_to_cnodeid(cpuid)                (physical_node_map[cpuid_to_nasid(cpuid)])