exit: Add PANIC_ON_RECURSIVE_FAULT Kconfig option

If a recursive fault is detected during do_exit(), tasks are left
to sit and wait in an un-interruptible sleep until the system
reboots (typically manually). Add Kconfig option to change this
behaviour and force a panic.

This is particularly important if a critical system task encounters
a recursive fault (ex. a kworker). Otherwise, the system may be
unusable, but since the scheduler is still running system watchdogs
may continue to be pet.

Change-Id: Ifc26fc79d6066f05a3b2c4d27f78bf4f8d2bd640
Signed-off-by: Matt Wagantall <mattw@codeaurora.org>
tirimbino
Matt Wagantall 10 years ago committed by Gerrit - the friendly Code Review server
parent 7cef4908ce
commit 6499baf92d
  1. 4
      kernel/exit.c
  2. 11
      lib/Kconfig.debug

@ -797,7 +797,11 @@ void __noreturn do_exit(long code)
* leave this task alone and wait for reboot.
*/
if (unlikely(tsk->flags & PF_EXITING)) {
#ifdef CONFIG_PANIC_ON_RECURSIVE_FAULT
panic("Recursive fault!\n");
#else
pr_alert("Fixing recursive fault but reboot is needed!\n");
#endif
/*
* We can do this unlocked here. The futex code uses
* this flag just to verify whether the pi state

@ -879,6 +879,17 @@ config BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
default 0 if !BOOTPARAM_SOFTLOCKUP_PANIC
default 1 if BOOTPARAM_SOFTLOCKUP_PANIC
config PANIC_ON_RECURSIVE_FAULT
bool "Panic on recursive faults during task exit"
help
Panic upon the detection of a recursive fault during task exit,
rather than putting the task into an uninterruptible sleep.
This is particularly useful for debugging system hangs in
scenarios where the task experiencing the fault is critical
for system operation, rendering the system inoperable.
Say N if unsure.
config DETECT_HUNG_TASK
bool "Detect Hung Tasks"
depends on DEBUG_KERNEL

Loading…
Cancel
Save