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:
parent
42748752f6
commit
234c7f1ac1
1 changed files with 6 additions and 5 deletions
|
@ -379,12 +379,7 @@ asmlinkage void secondary_start_kernel(void)
|
||||||
|
|
||||||
setup_priv();
|
setup_priv();
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable local interrupts.
|
|
||||||
*/
|
|
||||||
tbi_startup_interrupt(TBID_SIGNUM_TRT);
|
|
||||||
notify_cpu_starting(cpu);
|
notify_cpu_starting(cpu);
|
||||||
local_irq_enable();
|
|
||||||
|
|
||||||
pr_info("CPU%u (thread %u): Booted secondary processor\n",
|
pr_info("CPU%u (thread %u): Booted secondary processor\n",
|
||||||
cpu, cpu_2_hwthread_id[cpu]);
|
cpu, cpu_2_hwthread_id[cpu]);
|
||||||
|
@ -397,6 +392,12 @@ asmlinkage void secondary_start_kernel(void)
|
||||||
*/
|
*/
|
||||||
set_cpu_online(cpu, true);
|
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
|
* OK, it's off to the idle thread for us
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue