metag: smp: enable irqs after set_cpu_online

In secondary_start_kernel() interrupts should be enabled with
local_irq_enable() after the cpu is marked as online with
set_cpu_online(). Otherwise it's possible for a timer interrupt to
trigger a softirq, which if the cpu is marked as offline may have it's
affinity altered.

Reported-by: Kirill Tkhai <tkhai@yandex.ru>
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Kirill Tkhai <tkhai@yandex.ru>
This commit is contained in:
James Hogan 2013-06-28 13:56:02 +01:00
parent 42748752f6
commit 234c7f1ac1
1 changed files with 6 additions and 5 deletions

View File

@ -379,12 +379,7 @@ asmlinkage void secondary_start_kernel(void)
setup_priv();
/*
* Enable local interrupts.
*/
tbi_startup_interrupt(TBID_SIGNUM_TRT);
notify_cpu_starting(cpu);
local_irq_enable();
pr_info("CPU%u (thread %u): Booted secondary processor\n",
cpu, cpu_2_hwthread_id[cpu]);
@ -397,6 +392,12 @@ asmlinkage void secondary_start_kernel(void)
*/
set_cpu_online(cpu, true);
/*
* Enable local interrupts.
*/
tbi_startup_interrupt(TBID_SIGNUM_TRT);
local_irq_enable();
/*
* OK, it's off to the idle thread for us
*/