ARM: CPU hotplug: ensure correct ordering of unplug
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 30 Nov 2010 12:21:30 +0000 (12:21 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 20 Dec 2010 15:09:11 +0000 (15:09 +0000)
Don't call idle_task_exit() with interrupts disabled, and ensure
that we have a memory barrier after interrupts are disabled but
before signalling that this CPU has shut down.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/smp.c

index 8c81ff9..1a1c5e2 100644 (file)
@@ -269,9 +269,11 @@ void __ref cpu_die(void)
 {
        unsigned int cpu = smp_processor_id();
 
-       local_irq_disable();
        idle_task_exit();
 
+       local_irq_disable();
+       mb();
+
        /* Tell __cpu_die() that this CPU is now safe to dispose of */
        complete(&cpu_died);