summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/admin-guide/kernel-parameters.txt3
-rw-r--r--kernel/workqueue.c2
-rw-r--r--lib/Kconfig.debug23
3 files changed, 26 insertions, 2 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index a8d0afde7f85..5a9df399dd72 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -8336,7 +8336,8 @@ Kernel parameters
CONFIG_WQ_WATCHDOG. It sets the number times of the
stall to trigger panic.
- The default is 0, which disables the panic on stall.
+ The default is set by CONFIG_BOOTPARAM_WQ_STALL_PANIC,
+ which is 0 (disabled) if not configured.
workqueue.cpu_intensive_thresh_us=
Per-cpu work items which run for longer than this
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 64fe81f30e85..2e7fd46fce17 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -7568,7 +7568,7 @@ static struct timer_list wq_watchdog_timer;
static unsigned long wq_watchdog_touched = INITIAL_JIFFIES;
static DEFINE_PER_CPU(unsigned long, wq_watchdog_touched_cpu) = INITIAL_JIFFIES;
-static unsigned int wq_panic_on_stall;
+static unsigned int wq_panic_on_stall = CONFIG_BOOTPARAM_WQ_STALL_PANIC;
module_param_named(panic_on_stall, wq_panic_on_stall, uint, 0644);
/*
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index ba36939fda79..ce25a8faf6e9 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1297,6 +1297,29 @@ config WQ_WATCHDOG
state. This can be configured through kernel parameter
"workqueue.watchdog_thresh" and its sysfs counterpart.
+config BOOTPARAM_WQ_STALL_PANIC
+ int "Panic on Nth workqueue stall"
+ default 0
+ range 0 100
+ depends on WQ_WATCHDOG
+ help
+ Set the number of workqueue stalls to trigger a kernel panic.
+ A workqueue stall occurs when a worker pool doesn't make forward
+ progress on a pending work item for over 30 seconds (configurable
+ using the workqueue.watchdog_thresh parameter).
+
+ If n = 0, the kernel will not panic on stall. If n > 0, the kernel
+ will panic after n stall warnings.
+
+ The panic can be used in combination with panic_timeout,
+ to cause the system to reboot automatically after a
+ stall has been detected. This feature is useful for
+ high-availability systems that have uptime guarantees and
+ where a stall must be resolved ASAP.
+
+ This setting can be overridden at runtime via the
+ workqueue.panic_on_stall kernel parameter.
+
config WQ_CPU_INTENSIVE_REPORT
bool "Report per-cpu work items which hog CPU for too long"
depends on DEBUG_KERNEL