]> git.hungrycats.org Git - linux/commitdiff
[PATCH] ppc64: set platform cpuids later in boot
authorPaul Mackerras <paulus@samba.org>
Tue, 31 Aug 2004 03:33:23 +0000 (20:33 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 31 Aug 2004 03:33:23 +0000 (20:33 -0700)
Move the initialization of the per-cpu paca->hw_cpu_id out of the Open
Firmware client boot code and into a common location which is executed
later.

Signed-off-by: Nathan Lynch <nathanl@austin.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/ppc64/kernel/prom.c
arch/ppc64/kernel/setup.c
include/asm-ppc64/smp.h

index 58f9375d3a789083fb96e21e161f2fe4d31a8417..a4e33f2cc8f955ce0de1f4c01a5fee5c1e0e9e9c 100644 (file)
@@ -919,31 +919,11 @@ static void __init prom_hold_cpus(unsigned long mem)
        unsigned long secondary_hold
                = virt_to_abs(*PTRRELOC((unsigned long *)__secondary_hold));
        struct systemcfg *_systemcfg = RELOC(systemcfg);
-       struct paca_struct *lpaca = PTRRELOC(&paca[0]);
        struct prom_t *_prom = PTRRELOC(&prom);
 #ifdef CONFIG_SMP
        struct naca_struct *_naca = RELOC(naca);
 #endif
 
-       /* On pmac, we just fill out the various global bitmasks and
-        * arrays indicating our CPUs are here, they are actually started
-        * later on from pmac_smp
-        */
-       if (_systemcfg->platform == PLATFORM_POWERMAC) {
-               for (node = 0; prom_next_node(&node); ) {
-                       type[0] = 0;
-                       prom_getprop(node, "device_type", type, sizeof(type));
-                       if (strcmp(type, RELOC("cpu")) != 0)
-                               continue;
-                       reg = -1;
-                       prom_getprop(node, "reg", &reg, sizeof(reg));
-                       lpaca[cpuid].hw_cpu_id = reg;
-
-                       cpuid++;
-               }
-               return;
-       }
-
        prom_debug("prom_hold_cpus: start...\n");
        prom_debug("    1) spinloop       = 0x%x\n", (unsigned long)spinloop);
        prom_debug("    1) *spinloop      = 0x%x\n", *spinloop);
@@ -987,7 +967,6 @@ static void __init prom_hold_cpus(unsigned long mem)
 
                prom_debug("\ncpuid        = 0x%x\n", cpuid);
                prom_debug("cpu hw idx   = 0x%x\n", reg);
-               lpaca[cpuid].hw_cpu_id = reg;
 
                /* Init the acknowledge var which will be reset by
                 * the secondary cpu when it awakens from its OF
@@ -1044,7 +1023,6 @@ next:
                        cpuid++;
                        if (cpuid >= NR_CPUS)
                                continue;
-                       lpaca[cpuid].hw_cpu_id = interrupt_server[i];
                        prom_printf("%x : preparing thread ... ",
                                    interrupt_server[i]);
                        if (_naca->smt_state) {
index fbe2161f90e4bb5d0a0a625ed73b70a4d1bae0a0..9d7f351fc976d0123325414adc90fff17f9c695b 100644 (file)
@@ -170,6 +170,8 @@ void __init disable_early_printk(void)
  *
  * This function is valid only for Open Firmware systems.  finish_device_tree
  * must be called before using this.
+ *
+ * While we're here, we may as well set the "physical" cpu ids in the paca.
  */
 static void __init setup_cpu_maps(void)
 {
@@ -182,11 +184,15 @@ static void __init setup_cpu_maps(void)
 
                intserv = (u32 *)get_property(dn, "ibm,ppc-interrupt-server#s",
                                              &len);
+               if (!intserv)
+                       intserv = (u32 *)get_property(dn, "reg", NULL);
+
                nthreads = len / sizeof(u32);
 
                for (j = 0; j < nthreads && cpu < NR_CPUS; j++) {
                        cpu_set(cpu, cpu_possible_map);
                        cpu_set(cpu, cpu_present_map);
+                       set_hard_smp_processor_id(cpu, intserv[j]);
                        cpu++;
                }
        }
index 40627b49f31c897b9841b63431d42b524928caa3..cac758f686e4b2371921a6841a76780228320a96 100644 (file)
@@ -63,7 +63,7 @@ extern int query_cpu_stopped(unsigned int pcpu);
 
 #define get_hard_smp_processor_id(CPU) (paca[(CPU)].hw_cpu_id)
 #define set_hard_smp_processor_id(CPU, VAL) \
-       do { (paca[(CPU)].hw_proc_num = (VAL)); } while (0)
+       do { (paca[(CPU)].hw_cpu_id = (VAL)); } while (0)
 
 #endif /* __ASSEMBLY__ */