• Thomas Gleixner's avatar
    tick: Fix oneshot broadcast setup really · b435092f
    Thomas Gleixner authored
    Sven Joachim reported, that suspend/resume on rc3 trips over a NULL
    pointer dereference. Linus spotted the clockevent handler being NULL.
    
    commit fa4da365(clockevents: tTack broadcast device mode change in
    tick_broadcast_switch_to_oneshot()) tried to fix a problem with the
    broadcast device setup, which was introduced in commit 77b0d60c(
    clockevents: Leave the broadcast device in shutdown mode when not
    needed).
    
    The initial commit avoided to set up the broadcast device when no
    broadcast request bits were set, but that left the broadcast device
    disfunctional. In consequence deep idle states which need the
    broadcast device were not woken up.
    
    commit fa4da365 tried to fix that by initializing the state of the
    broadcast facility, but that missed the fact, that nothing initializes
    the event handler and some other state of the underlying clock event
    device.
    
    The fix is to revert both commits and make only the mode setting of
    the clock event device conditional on the state of active broadcast
    users. 
    
    That initializes everything except the low level device mode, but this
    happens when the broadcast functionality is invoked by deep idle.
    Reported-and-tested-by: default avatarSven Joachim <svenjoac@gmx.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Rafael J. Wysocki <rjw@sisk.pl>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Suresh Siddha <suresh.b.siddha@intel.com>
    Link: http://lkml.kernel.org/r/alpine.LFD.2.02.1204181205540.2542@ionos
    b435092f
tick-broadcast.c 15.5 KB