Message ID | 31226871825643c98694.1714636915.miltonm@bga.com (mailing list archive) |
---|---|
State | Deferred, archived |
Headers | show |
On Sun, 2008-11-16 at 15:43 -0600, Milton Miller wrote: > Instead of copying current_set[cpu] to secondary_ti, directly index into > current_set by the cpu number like head_64.S. In addition to removing > the variable, a slow to respond cpu will not clobber another cpus > stack. Except that we don't know our CPU number at this stage do we ? IE. r24 is our HW number, is it guaranteed to be what we want to index current_set ? Ben.
On Nov 16, 2008, at 2:26 PM, Benjamin Herrenschmidt wrote: > On Sun, 2008-11-16 at 15:43 -0600, Milton Miller wrote: >> Instead of copying current_set[cpu] to secondary_ti, directly index >> into >> current_set by the cpu number like head_64.S. In addition to removing >> the variable, a slow to respond cpu will not clobber another cpus >> stack. > > Except that we don't know our CPU number at this stage do we ? IE. r24 > is our HW number, is it guaranteed to be what we want to index > current_set ? No, you are right, current_set is ordered by logical cpu id. We could search the hwcpuid array similar to our search of the paca on ppc64. But for now go ahead and reject this patch. milton
Index: next.git/arch/powerpc/kernel/head_32.S =================================================================== --- next.git.orig/arch/powerpc/kernel/head_32.S 2008-11-16 01:36:45.000000000 -0600 +++ next.git/arch/powerpc/kernel/head_32.S 2008-11-16 01:42:02.000000000 -0600 @@ -906,10 +906,11 @@ __secondary_start: bl init_idle_6xx #endif /* CONFIG_6xx */ - /* get current_thread_info and current */ - lis r1,secondary_ti@ha + /* get current_thread_info (current_set[cpu]) and current = */ + slwi r1,r24,2 + addis r1,r1,current_set@ha tophys(r1,r1) - lwz r1,secondary_ti@l(r1) + lwz r1,current_set@l(r1) tophys(r2,r1) lwz r2,TI_TASK(r2) Index: next.git/arch/powerpc/kernel/smp.c =================================================================== --- next.git.orig/arch/powerpc/kernel/smp.c 2008-11-16 01:36:05.000000000 -0600 +++ next.git/arch/powerpc/kernel/smp.c 2008-11-16 01:36:22.000000000 -0600 @@ -58,7 +58,6 @@ #endif int smp_hw_index[NR_CPUS]; -struct thread_info *secondary_ti; cpumask_t cpu_possible_map = CPU_MASK_NONE; cpumask_t cpu_online_map = CPU_MASK_NONE; @@ -320,7 +319,6 @@ int __cpuinit __cpu_up(unsigned int cpu) { int c; - secondary_ti = current_set[cpu]; if (!cpu_enable(cpu)) return 0;