Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

panic: Make panic_timeout configurable

The panic_timeout value can be set via the command line option
'panic=x', or via /proc/sys/kernel/panic, however that is not
sufficient when the panic occurs before we are able to set up
these values. Thus, add a CONFIG_PANIC_TIMEOUT so that we can
set the desired value from the .config.

The default panic_timeout value continues to be 0 - wait
forever. Also adds set_arch_panic_timeout(new_timeout,
arch_default_timeout), which is intended to be used by arches in
arch_setup(). The idea being that the new_timeout is only set if
the user hasn't changed from the arch_default_timeout.

Signed-off-by: Jason Baron <jbaron@akamai.com>
Cc: benh@kernel.crashing.org
Cc: paulus@samba.org
Cc: ralf@linux-mips.org
Cc: mpe@ellerman.id.au
Cc: felipe.contreras@gmail.com
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1a1674daec27c534df409697025ac568ebcee91e.1385418410.git.jbaron@akamai.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>

authored by

Jason Baron and committed by
Ingo Molnar
5800dc3c b975dc36

+19 -1
+9
include/linux/kernel.h
··· 393 393 extern int panic_on_unrecovered_nmi; 394 394 extern int panic_on_io_nmi; 395 395 extern int sysctl_panic_on_stackoverflow; 396 + /* 397 + * Only to be used by arch init code. If the user over-wrote the default 398 + * CONFIG_PANIC_TIMEOUT, honor it. 399 + */ 400 + static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout) 401 + { 402 + if (panic_timeout == arch_default_timeout) 403 + panic_timeout = timeout; 404 + } 396 405 extern const char *print_tainted(void); 397 406 enum lockdep_ok { 398 407 LOCKDEP_STILL_OK,
+1 -1
kernel/panic.c
··· 33 33 static int pause_on_oops_flag; 34 34 static DEFINE_SPINLOCK(pause_on_oops_lock); 35 35 36 - int panic_timeout; 36 + int panic_timeout = CONFIG_PANIC_TIMEOUT; 37 37 EXPORT_SYMBOL_GPL(panic_timeout); 38 38 39 39 ATOMIC_NOTIFIER_HEAD(panic_notifier_list);
+9
lib/Kconfig.debug
··· 761 761 default 0 if !PANIC_ON_OOPS 762 762 default 1 if PANIC_ON_OOPS 763 763 764 + config PANIC_TIMEOUT 765 + int "panic timeout" 766 + default 0 767 + help 768 + Set the timeout value (in seconds) until a reboot occurs when the 769 + the kernel panics. If n = 0, then we wait forever. A timeout 770 + value n > 0 will wait n seconds before rebooting, while a timeout 771 + value n < 0 will reboot immediately. 772 + 764 773 config SCHED_DEBUG 765 774 bool "Collect scheduler debugging info" 766 775 depends on DEBUG_KERNEL && PROC_FS