svn commit: r305853 - in stable/10: share/man/man4 sys/kern
Hiren Panchasara
hiren at FreeBSD.org
Fri Sep 16 00:14:27 UTC 2016
Author: hiren
Date: Fri Sep 16 00:14:26 2016
New Revision: 305853
URL: https://svnweb.freebsd.org/changeset/base/305853
Log:
MFC r301522 (by bz)
Implement a `show panic` command to DDB which will helpfully print the
panic string again if set, in case it scrolled out of the active
window. This avoids having to remember the symbol name.
Also add a show callout <addr> command to DDB in order to inspect
some struct callout fields in case of panics in the callout code.
This may help to see if there was memory corruption or to further
ease debugging problems.
No objection by: bz
Modified:
stable/10/share/man/man4/ddb.4
stable/10/sys/kern/kern_shutdown.c
stable/10/sys/kern/kern_timeout.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/share/man/man4/ddb.4
==============================================================================
--- stable/10/share/man/man4/ddb.4 Fri Sep 16 00:08:37 2016 (r305852)
+++ stable/10/share/man/man4/ddb.4 Fri Sep 16 00:14:26 2016 (r305853)
@@ -611,6 +611,13 @@ See the
header file for more details on the exact meaning of the structure fields.
.\"
.Pp
+.It Ic show Cm callout Ar addr
+Show information about the callout structure
+.Vt struct callout
+present at
+.Ar addr .
+.\"
+.Pp
.It Ic show Cm cbstat
Show brief information about the TTY subsystem.
.\"
@@ -839,6 +846,10 @@ option is specified the
complete object is printed.
.\"
.Pp
+.It Ic show Cm panic
+Print the panic message if set.
+.\"
+.Pp
.It Ic show Cm page
Show statistics on VM pages.
.\"
Modified: stable/10/sys/kern/kern_shutdown.c
==============================================================================
--- stable/10/sys/kern/kern_shutdown.c Fri Sep 16 00:08:37 2016 (r305852)
+++ stable/10/sys/kern/kern_shutdown.c Fri Sep 16 00:14:26 2016 (r305853)
@@ -1031,3 +1031,14 @@ mkdumpheader(struct kerneldumpheader *kd
strlcpy(kdh->panicstring, panicstr, sizeof(kdh->panicstring));
kdh->parity = kerneldump_parity(kdh);
}
+
+#ifdef DDB
+DB_SHOW_COMMAND(panic, db_show_panic)
+{
+
+ if (panicstr == NULL)
+ db_printf("panicstr not set\n");
+ else
+ db_printf("panic: %s\n", panicstr);
+}
+#endif
Modified: stable/10/sys/kern/kern_timeout.c
==============================================================================
--- stable/10/sys/kern/kern_timeout.c Fri Sep 16 00:08:37 2016 (r305852)
+++ stable/10/sys/kern/kern_timeout.c Fri Sep 16 00:14:26 2016 (r305853)
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include "opt_callout_profiling.h"
#include "opt_kdtrace.h"
+#include "opt_ddb.h"
#if defined(__arm__)
#include "opt_timer.h"
#endif
@@ -60,6 +61,11 @@ __FBSDID("$FreeBSD$");
#include <sys/sysctl.h>
#include <sys/smp.h>
+#ifdef DDB
+#include <ddb/ddb.h>
+#include <machine/_inttypes.h>
+#endif
+
#ifdef SMP
#include <machine/cpu.h>
#endif
@@ -1576,3 +1582,34 @@ SYSCTL_PROC(_kern, OID_AUTO, callout_sta
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
0, 0, sysctl_kern_callout_stat, "I",
"Dump immediate statistic snapshot of the scheduled callouts");
+
+#ifdef DDB
+static void
+_show_callout(struct callout *c)
+{
+
+ db_printf("callout %p\n", c);
+#define C_DB_PRINTF(f, e) db_printf(" %s = " f "\n", #e, c->e);
+ db_printf(" &c_links = %p\n", &(c->c_links));
+ C_DB_PRINTF("%" PRId64, c_time);
+ C_DB_PRINTF("%" PRId64, c_precision);
+ C_DB_PRINTF("%p", c_arg);
+ C_DB_PRINTF("%p", c_func);
+ C_DB_PRINTF("%p", c_lock);
+ C_DB_PRINTF("%#x", c_flags);
+ C_DB_PRINTF("%#x", c_iflags);
+ C_DB_PRINTF("%d", c_cpu);
+#undef C_DB_PRINTF
+}
+
+DB_SHOW_COMMAND(callout, db_show_callout)
+{
+
+ if (!have_addr) {
+ db_printf("usage: show callout <struct callout *>\n");
+ return;
+ }
+
+ _show_callout((struct callout *)addr);
+}
+#endif /* DDB */
More information about the svn-src-all
mailing list