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 | |
| 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>
| -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); |
