arm64: Only enable local interrupts after the CPU is marked online
There is a slight chance that (timer) interrupts are triggered before a secondary CPU has been marked online with implications on softirq thread affinity. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Reported-by: Kirill Tkhai <tkhai@yandex.ru>
This commit is contained in:
parent
ad81f0545e
commit
53ae3acd43
|
@ -199,13 +199,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
|
||||||
raw_spin_lock(&boot_lock);
|
raw_spin_lock(&boot_lock);
|
||||||
raw_spin_unlock(&boot_lock);
|
raw_spin_unlock(&boot_lock);
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable local interrupts.
|
|
||||||
*/
|
|
||||||
notify_cpu_starting(cpu);
|
|
||||||
local_irq_enable();
|
|
||||||
local_fiq_enable();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OK, now it's safe to let the boot CPU continue. Wait for
|
* OK, now it's safe to let the boot CPU continue. Wait for
|
||||||
* the CPU migration code to notice that the CPU is online
|
* the CPU migration code to notice that the CPU is online
|
||||||
|
@ -214,6 +207,14 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
|
||||||
set_cpu_online(cpu, true);
|
set_cpu_online(cpu, true);
|
||||||
complete(&cpu_running);
|
complete(&cpu_running);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enable GIC and timers.
|
||||||
|
*/
|
||||||
|
notify_cpu_starting(cpu);
|
||||||
|
|
||||||
|
local_irq_enable();
|
||||||
|
local_fiq_enable();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OK, it's off to the idle thread for us
|
* OK, it's off to the idle thread for us
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue