kernel/watchdog.c: control hard lockup detection default
authorUlrich Obergfell <[email protected]>
Mon, 13 Oct 2014 22:55:35 +0000 (15:55 -0700)
committerLinus Torvalds <[email protected]>
Tue, 14 Oct 2014 00:18:27 +0000 (02:18 +0200)
commit6e7458a6f074c71e74cda31c483114e65ea0f570
treed942b6b9ec308d66f64649b94d088b02bf2e6309
parent8a1db92830d0a71e1429725992eb91470214c820
kernel/watchdog.c: control hard lockup detection default

In some cases we don't want hard lockup detection enabled by default.
An example is when running as a guest.  Introduce

  watchdog_enable_hardlockup_detector(bool)

allowing those cases to disable hard lockup detection.  This must be
executed early by the boot processor from e.g.  smp_prepare_boot_cpu, in
order to allow kernel command line arguments to override it, as well as
to avoid hard lockup detection being enabled before we've had a chance
to indicate that it's unwanted.  In summary,

  initial boot: default=enabled
  smp_prepare_boot_cpu
    watchdog_enable_hardlockup_detector(false): default=disabled
  cmdline has 'nmi_watchdog=1': default=enabled

The running kernel still has the ability to enable/disable at any time
with /proc/sys/kernel/nmi_watchdog us usual.  However even when the
default has been overridden /proc/sys/kernel/nmi_watchdog will initially
show '1'.  To truly turn it on one must disable/enable it, i.e.

  echo 0 > /proc/sys/kernel/nmi_watchdog
  echo 1 > /proc/sys/kernel/nmi_watchdog

This patch will be immediately useful for KVM with the next patch of this
series.  Other hypervisor guest types may find it useful as well.

[[email protected]: fix build]
[[email protected]: fix compile issues on sparc]
Signed-off-by: Ulrich Obergfell <[email protected]>
Signed-off-by: Andrew Jones <[email protected]>
Signed-off-by: Don Zickus <[email protected]>
Signed-off-by: Don Zickus <[email protected]>
Cc: Stephen Rothwell <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
include/linux/nmi.h
kernel/watchdog.c