Skip to content
  • Bjørn Mork's avatar
    watchdog: Fix disable/enable regression · 3935e895
    Bjørn Mork authored
    Commit 8d451690 ("watchdog: Fix CPU hotplug regression") causes an
    oops or hard lockup when doing
    
     echo 0 > /proc/sys/kernel/nmi_watchdog
     echo 1 > /proc/sys/kernel/nmi_watchdog
    
    and the kernel is booted with nmi_watchdog=1 (default)
    
    Running laptop-mode-tools and disconnecting/connecting AC power will
    cause this to trigger, making it a common failure scenario on laptops.
    
    Instead of bailing out of watchdog_disable() when !watchdog_enabled we
    can initialize the hrtimer regardless of watchdog_enabled status.  This
    makes it safe to call watchdog_disable() in the nmi_watchdog=0 case,
    without the negative effect on the enabled => disabled => enabled case.
    
    All these tests pass with this patch:
    - nmi_watchdog=1
      echo 0 > /proc/sys/kernel/nmi_watchdog
      echo 1 > /proc/sys/kernel/nmi_watchdog
    
    - nmi_watchdog=0
      echo 0 > /sys/devices/system/cpu/cpu1/online
    
    - nmi_watchdog=0
      echo mem > /sys/power/state
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=51661
    
    
    
    Cc: <stable@vger.kernel.org> # v3.7
    Cc: Norbert Warmuth <nwarmuth@t-online.de>
    Cc: Joseph Salisbury <joseph.salisbury@canonical.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3935e895