aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/smp.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2010-12-20 11:58:19 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-12-20 11:58:19 -0500
commitfaabfa0816916b0a7cfc93f6a9be382830658c80 (patch)
tree95b003cd7a92c20e4212ab7d315fc75287f91bd8 /arch/arm/kernel/smp.c
parent03b505eae6a276b8c38b6222694afb6cea10b1cc (diff)
ARM: SMP: ensure frame pointer is reinitialized for soft-CPU hotplug
When we soft-CPU hotplug a CPU, we reset the stack pointer and jump back to start_secondary(). This allows us to restart as if the CPU was actually reset. However, we weren't resetting the frame pointer, which could cause problems with backtracing. Reset the frame pointer to zero (which means no parent frame) just like the early assembly code also does. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/smp.c')
-rw-r--r--arch/arm/kernel/smp.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 6d0c66bc434d..5341b0b19701 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -286,6 +286,7 @@ void __ref cpu_die(void)
286 * to be repeated to undo the effects of taking the CPU offline. 286 * to be repeated to undo the effects of taking the CPU offline.
287 */ 287 */
288 __asm__("mov sp, %0\n" 288 __asm__("mov sp, %0\n"
289 " mov fp, #0\n"
289 " b secondary_start_kernel" 290 " b secondary_start_kernel"
290 : 291 :
291 : "r" (task_stack_page(current) + THREAD_SIZE - 8)); 292 : "r" (task_stack_page(current) + THREAD_SIZE - 8));