svn commit: r367848 - in head: share/man/man4 sys/kern
Mitchell Horne
mhorne at FreeBSD.org
Thu Nov 19 18:03:41 UTC 2020
Author: mhorne
Date: Thu Nov 19 18:03:40 2020
New Revision: 367848
URL: https://svnweb.freebsd.org/changeset/base/367848
Log:
Add an option for entering KDB on recursive panics
There are many cases where one would choose avoid entering the debugger
on a normal panic, opting instead to reboot and possibly save a kernel
dump. However, recursive kernel panics are an unusual case that might
warrant attention from a human, so provide a secondary tunable,
debug.debugger_on_recursive_panic, to allow entering the debugger only
when this occurs.
For for simplicity in maintaining existing behaviour, the tunable
defaults to zero.
Reviewed by: cem, markj
Sponsored by: NetApp, Inc.
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D27271
Modified:
head/share/man/man4/ddb.4
head/sys/kern/kern_shutdown.c
Modified: head/share/man/man4/ddb.4
==============================================================================
--- head/share/man/man4/ddb.4 Thu Nov 19 17:54:41 2020 (r367847)
+++ head/share/man/man4/ddb.4 Thu Nov 19 18:03:40 2020 (r367848)
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 17, 2019
+.Dd November 19, 2020
.Dt DDB 4
.Os
.Sh NAME
@@ -87,6 +87,16 @@ which is the default
unless the
.Dv KDB_UNATTENDED
option is specified.
+Similarly, if the
+.Va debug.debugger_on_recursive_panic
+variable is set to
+.Dv 1 ,
+then the debugger will be invoked on a recursive kernel panic.
+This variable has a default value of
+.Dv 0 ,
+and has no effect if
+.Va debug.debugger_on_panic
+is already set non-zero.
.Pp
The current location is called
.Va dot .
Modified: head/sys/kern/kern_shutdown.c
==============================================================================
--- head/sys/kern/kern_shutdown.c Thu Nov 19 17:54:41 2020 (r367847)
+++ head/sys/kern/kern_shutdown.c Thu Nov 19 18:03:40 2020 (r367848)
@@ -127,6 +127,11 @@ SYSCTL_INT(_debug, OID_AUTO, debugger_on_panic,
CTLFLAG_RWTUN | CTLFLAG_SECURE,
&debugger_on_panic, 0, "Run debugger on kernel panic");
+static bool debugger_on_recursive_panic = false;
+SYSCTL_BOOL(_debug, OID_AUTO, debugger_on_recursive_panic,
+ CTLFLAG_RWTUN | CTLFLAG_SECURE,
+ &debugger_on_recursive_panic, 0, "Run debugger on recursive kernel panic");
+
int debugger_on_trap = 0;
SYSCTL_INT(_debug, OID_AUTO, debugger_on_trap,
CTLFLAG_RWTUN | CTLFLAG_SECURE,
@@ -899,6 +904,8 @@ vpanic(const char *fmt, va_list ap)
kdb_backtrace();
if (debugger_on_panic)
kdb_enter(KDB_WHY_PANIC, "panic");
+ else if (!newpanic && debugger_on_recursive_panic)
+ kdb_enter(KDB_WHY_PANIC, "re-panic");
#endif
/*thread_lock(td); */
td->td_flags |= TDF_INPANIC;
More information about the svn-src-all
mailing list