arm64: smp: Jump back to secondary start kernel for onlined CPUs

Add a call to secondary start kernel for cpus which have been
onlined via the hotplug path for wfi based hotplug solution
where the return path from cpu_die should not return to the
idle thread. Update the cpu_die definition with a __ref to
allow referencing a __cpuinit call (secondary_start_kernel)
from it.

Change-Id: I7c083effda3928b562ea0d601833ceb8d5178d43
Signed-off-by: Abhimanyu Kapur <abhimany@codeaurora.org>
This commit is contained in:
Abhimanyu Kapur 2014-02-10 00:00:52 -08:00 committed by David Keitel
parent e6903e45a6
commit f237941bd1

View file

@ -295,7 +295,7 @@ void __cpu_die(unsigned int cpu)
* of the other hotplug-cpu capable cores, so presumably coming * of the other hotplug-cpu capable cores, so presumably coming
* out of idle fixes this. * out of idle fixes this.
*/ */
void cpu_die(void) void __ref cpu_die(void)
{ {
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
@ -313,7 +313,16 @@ void cpu_die(void)
*/ */
cpu_ops[cpu]->cpu_die(cpu); cpu_ops[cpu]->cpu_die(cpu);
BUG(); /*
* Do not return to the idle loop - jump back to the secondary
* cpu initialisation. There's some initialisation which needs
* to be repeated to undo the effects of taking the CPU offline.
*/
asm volatile("mov sp, %0\n"
"mov x29, #0\n"
"b secondary_start_kernel"
: : "r" (task_stack_page(current) + THREAD_START_SP));
} }
#endif #endif