diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2013-07-19 10:08:15 -0400 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2013-07-19 10:49:42 -0400 |
commit | 53ae3acd4390ffeecb3a11dbd5be347b5a3d98f2 (patch) | |
tree | ddea9b72c31a91d658eee33f54ac602a342b3687 /arch/arm64 | |
parent | ad81f0545ef01ea651886dddac4bef6cec930092 (diff) |
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>
Diffstat (limited to 'arch/arm64')
-rw-r--r-- | arch/arm64/kernel/smp.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index 5d54e3717bf8..9c93e126328c 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c | |||
@@ -200,13 +200,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
200 | raw_spin_unlock(&boot_lock); | 200 | raw_spin_unlock(&boot_lock); |
201 | 201 | ||
202 | /* | 202 | /* |
203 | * Enable local interrupts. | ||
204 | */ | ||
205 | notify_cpu_starting(cpu); | ||
206 | local_irq_enable(); | ||
207 | local_fiq_enable(); | ||
208 | |||
209 | /* | ||
210 | * OK, now it's safe to let the boot CPU continue. Wait for | 203 | * OK, now it's safe to let the boot CPU continue. Wait for |
211 | * the CPU migration code to notice that the CPU is online | 204 | * the CPU migration code to notice that the CPU is online |
212 | * before we continue. | 205 | * before we continue. |
@@ -215,6 +208,14 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
215 | complete(&cpu_running); | 208 | complete(&cpu_running); |
216 | 209 | ||
217 | /* | 210 | /* |
211 | * Enable GIC and timers. | ||
212 | */ | ||
213 | notify_cpu_starting(cpu); | ||
214 | |||
215 | local_irq_enable(); | ||
216 | local_fiq_enable(); | ||
217 | |||
218 | /* | ||
218 | * OK, it's off to the idle thread for us | 219 | * OK, it's off to the idle thread for us |
219 | */ | 220 | */ |
220 | cpu_startup_entry(CPUHP_ONLINE); | 221 | cpu_startup_entry(CPUHP_ONLINE); |