[patch] ARM: smpboot: Enable interrupts after marking CPU online/active

Russell King - ARM Linux linux at arm.linux.org.uk
Tue Sep 13 09:32:58 EDT 2011


On Tue, Sep 13, 2011 at 07:00:53PM +0530, amit kachhap wrote:
> Hi Thomas,
> 
> This movement of set_cpu_online before percpu_timer_setup is usefull
> for samsung exyno4 platforms where the external gic timer
> initialisation needs the secondary cpu to be online.
> In addition to your modifications the following changes fixes the race
> condition crash happening when sched_mc configuration flags
> (CONFIG_ARM_CPU_TOPOLOGY, CONFIG_SCHED_MC ,CONFIG_SCHED_SMT) are
> enabled. Sched_mc patches are recently submitted by Vincent and
> accepted by Russell.(https://lkml.org/lkml/2011/7/5/209). I have not
> attached the crash log here. If needed i can do so.
> 
> ---
>  arch/arm/kernel/smp.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
> index 8cb94c8..04a8630 100644
> --- a/arch/arm/kernel/smp.c
> +++ b/arch/arm/kernel/smp.c
> @@ -316,6 +316,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
>          * interrupts otherwise a wakeup of a kernel thread affine to
>          * this CPU might break the affinity and let hell break lose.
>          */
> +       smp_store_cpu_info(cpu);
>         set_cpu_online(cpu, true);
>         while (!cpu_active(cpu))
>                 cpu_relax();
> @@ -330,7 +331,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
> 
>         calibrate_delay();
> 
> -       smp_store_cpu_info(cpu);

This is totally wrong - the order of things here is quite specific.
You can't store the CPU info until after you've calibrated the delay
loop.

Please continue playing cat-and-mouse with this.



More information about the linux-arm-kernel mailing list