svn commit: r301522 - in head: share/man/man4 sys/kern

Bjoern A. Zeeb bz at FreeBSD.org
Mon Jun 6 20:57:25 UTC 2016


Author: bz
Date: Mon Jun  6 20:57:24 2016
New Revision: 301522
URL: https://svnweb.freebsd.org/changeset/base/301522

Log:
  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.
  
  Obtained from:	projects/vnet
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation
  Reviewed by:	jhb (comment only on the show panic initally)
  Differential Revision:	https://reviews.freebsd.org/D4527

Modified:
  head/share/man/man4/ddb.4
  head/sys/kern/kern_shutdown.c
  head/sys/kern/kern_timeout.c

Modified: head/share/man/man4/ddb.4
==============================================================================
--- head/share/man/man4/ddb.4	Mon Jun  6 20:42:54 2016	(r301521)
+++ head/share/man/man4/ddb.4	Mon Jun  6 20:57:24 2016	(r301522)
@@ -60,7 +60,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 18, 2016
+.Dd June 6, 2016
 .Dt DDB 4
 .Os
 .Sh NAME
@@ -599,6 +599,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.
 .\"
@@ -834,6 +841,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: head/sys/kern/kern_shutdown.c
==============================================================================
--- head/sys/kern/kern_shutdown.c	Mon Jun  6 20:42:54 2016	(r301521)
+++ head/sys/kern/kern_shutdown.c	Mon Jun  6 20:57:24 2016	(r301522)
@@ -929,3 +929,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: head/sys/kern/kern_timeout.c
==============================================================================
--- head/sys/kern/kern_timeout.c	Mon Jun  6 20:42:54 2016	(r301521)
+++ head/sys/kern/kern_timeout.c	Mon Jun  6 20:57:24 2016	(r301522)
@@ -38,6 +38,7 @@
 __FBSDID("$FreeBSD$");
 
 #include "opt_callout_profiling.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
@@ -1615,3 +1621,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