Skip to content
  • Russell King's avatar
    ARM: OMAP2+: fix lack of timer interrupts on CPU1 after hotplug · c7c27161
    Russell King authored
    [ Upstream commit 50d6b3cf
    
     ]
    
    If we have a kernel configured for periodic timer interrupts, and we
    have cpuidle enabled, then we end up with CPU1 losing timer interupts
    after a hotplug.
    
    This can manifest itself in RCU stall warnings, or userspace becoming
    unresponsive.
    
    The problem is that the kernel initially wants to use the TWD timer
    for interrupts, but the TWD loses context when we enter the C3 cpuidle
    state.  Nothing reprograms the TWD after idle.
    
    We have solved this in the past by switching to broadcast timer ticks,
    and cpuidle44xx switches to that mode at boot time.  However, there is
    nothing to switch from periodic mode local timers after a hotplug
    operation.
    
    We call tick_broadcast_enter() in omap_enter_idle_coupled(), which one
    would expect would take care of the issue, but internally this only
    deals with one-shot local timers - tick_broadcast_enable() on the other
    hand only deals with periodic local timers.  So, we need to call both.
    
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    [tony@atomide.com: just standardized the subject line]
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    c7c27161