powerpc/4xx: Fix regression in SMP on 476
authorkerstin jonsson <kerstin.jonsson@ericsson.com>
Tue, 17 May 2011 23:57:11 +0000 (23:57 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 19 May 2011 03:09:22 +0000 (13:09 +1000)
commit c56e58537d504706954a06570b4034c04e5b7500 breaks SMP support in PPC_47x chip.
 secondary_ti must be set to current thread info before callin kick_cpu or else
 start_secondary_47x will jump into void when trying to return to c-code.
 In the current setup secondary_ti is initialized before the CPU idle task is started
 and only the boot core will start. I am not sure this is the correct solution, but it
 makes SMP possible in my chip.
 Note! The HOTPLUG support probably need some fixing to, There is no trampoline code
 available in head_44x.S - start_secondary_resume?

Signed-off-by: Kerstin Jonsson <kerstin.jonsson@ericsson.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/smp.c

index cbdbb14be4b07b0eb31faefec1bfb06e572761c4..f2dcab7aadc854cf6a530ab5f4e33e6d320b5435 100644 (file)
@@ -410,8 +410,6 @@ int __cpuinit __cpu_up(unsigned int cpu)
 {
        int rc, c;
 
-       secondary_ti = current_set[cpu];
-
        if (smp_ops == NULL ||
            (smp_ops->cpu_bootable && !smp_ops->cpu_bootable(cpu)))
                return -EINVAL;
@@ -421,6 +419,8 @@ int __cpuinit __cpu_up(unsigned int cpu)
        if (rc)
                return rc;
 
+       secondary_ti = current_set[cpu];
+
        /* Make sure callin-map entry is 0 (can be leftover a CPU
         * hotplug
         */