diff options
Diffstat (limited to 'arch/powerpc/kernel/smp.c')
-rw-r--r-- | arch/powerpc/kernel/smp.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 8b2d2dc8ef10..8ec017cb4446 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -700,7 +700,6 @@ void start_secondary(void *unused) | |||
700 | smp_store_cpu_info(cpu); | 700 | smp_store_cpu_info(cpu); |
701 | set_dec(tb_ticks_per_jiffy); | 701 | set_dec(tb_ticks_per_jiffy); |
702 | preempt_disable(); | 702 | preempt_disable(); |
703 | cpu_callin_map[cpu] = 1; | ||
704 | 703 | ||
705 | if (smp_ops->setup_cpu) | 704 | if (smp_ops->setup_cpu) |
706 | smp_ops->setup_cpu(cpu); | 705 | smp_ops->setup_cpu(cpu); |
@@ -739,6 +738,14 @@ void start_secondary(void *unused) | |||
739 | notify_cpu_starting(cpu); | 738 | notify_cpu_starting(cpu); |
740 | set_cpu_online(cpu, true); | 739 | set_cpu_online(cpu, true); |
741 | 740 | ||
741 | /* | ||
742 | * CPU must be marked active and online before we signal back to the | ||
743 | * master, because the scheduler needs to see the cpu_online and | ||
744 | * cpu_active bits set. | ||
745 | */ | ||
746 | smp_wmb(); | ||
747 | cpu_callin_map[cpu] = 1; | ||
748 | |||
742 | local_irq_enable(); | 749 | local_irq_enable(); |
743 | 750 | ||
744 | cpu_startup_entry(CPUHP_ONLINE); | 751 | cpu_startup_entry(CPUHP_ONLINE); |