• Max Filippov's avatar
    xtensa: SMP: fix ccount_timer_shutdown · f43e42f4
    Max Filippov authored
    [ Upstream commit 4fe8713b ]
    
    ccount_timer_shutdown is called from the atomic context in the
    secondary_start_kernel, resulting in the following BUG:
    
    BUG: sleeping function called from invalid context
    in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/1
    Preemption disabled at:
      secondary_start_kernel+0xa1/0x130
    Call Trace:
      ___might_sleep+0xe7/0xfc
      __might_sleep+0x41/0x44
      synchronize_irq+0x24/0x64
      disable_irq+0x11/0x14
      ccount_timer_shutdown+0x12/0x20
      clockevents_switch_state+0x82/0xb4
      clockevents_exchange_device+0x54/0x60
      tick_check_new_device+0x46/0x70
      clockevents_register_device+0x8c/0xc8
      clockevents_config_and_register+0x1d/0x2c
      local_timer_setup+0x75/0x7c
      secondary_start_kernel+0xb4/0x130
      should_never_return+0x32/0x35
    
    Use disable_irq_nosync instead of disable_irq to avoid it.
    This is safe because the ccount timer IRQ is per-CPU, and once IRQ is
    masked the ISR will not be called.
    Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    f43e42f4
time.c 5.21 KB