svn commit: r343923 - head/sys/dev/cxgbe

Navdeep Parhar np at FreeBSD.org
Sat Feb 9 01:49:55 UTC 2019


Author: np
Date: Sat Feb  9 01:49:53 2019
New Revision: 343923
URL: https://svnweb.freebsd.org/changeset/base/343923

Log:
  cxgbe(4): Delay the panic due to a fatal error by 30s.
  
  This lets information logged by the interrupt handler reach the system
  log before the system goes down.

Modified:
  head/sys/dev/cxgbe/t4_main.c

Modified: head/sys/dev/cxgbe/t4_main.c
==============================================================================
--- head/sys/dev/cxgbe/t4_main.c	Fri Feb  8 23:03:28 2019	(r343922)
+++ head/sys/dev/cxgbe/t4_main.c	Sat Feb  9 01:49:53 2019	(r343923)
@@ -556,7 +556,7 @@ SYSCTL_INT(_hw_cxgbe, OID_AUTO, pcie_relaxed_ordering,
 
 static int t4_panic_on_fatal_err = 0;
 SYSCTL_INT(_hw_cxgbe, OID_AUTO, panic_on_fatal_err, CTLFLAG_RDTUN,
-    &t4_panic_on_fatal_err, 0, "panic on fatal firmware errors");
+    &t4_panic_on_fatal_err, 0, "panic on fatal errors");
 
 #ifdef TCP_OFFLOAD
 /*
@@ -2562,6 +2562,16 @@ vcxgbe_detach(device_t dev)
 	return (0);
 }
 
+static struct callout fatal_callout;
+
+static void
+delayed_panic(void *arg)
+{
+	struct adapter *sc = arg;
+
+	panic("%s: panic on fatal error", device_get_nameunit(sc->dev));
+}
+
 void
 t4_fatal_err(struct adapter *sc, bool fw_error)
 {
@@ -2569,9 +2579,6 @@ t4_fatal_err(struct adapter *sc, bool fw_error)
 	t4_shutdown_adapter(sc);
 	log(LOG_ALERT, "%s: encountered fatal error, adapter stopped.\n",
 	    device_get_nameunit(sc->dev));
-	if (t4_panic_on_fatal_err)
-		panic("panic requested on fatal error");
-
 	if (fw_error) {
 		ASSERT_SYNCHRONIZED_OP(sc);
 		sc->flags |= ADAP_ERR;
@@ -2580,6 +2587,12 @@ t4_fatal_err(struct adapter *sc, bool fw_error)
 		sc->flags |= ADAP_ERR;
 		ADAPTER_UNLOCK(sc);
 	}
+
+	if (t4_panic_on_fatal_err) {
+		log(LOG_ALERT, "%s: panic on fatal error after 30s",
+		    device_get_nameunit(sc->dev));
+		callout_reset(&fatal_callout, hz * 30, delayed_panic, sc);
+	}
 }
 
 void
@@ -10685,6 +10698,7 @@ mod_event(module_t mod, int cmd, void *arg)
 			    do_smt_write_rpl);
 			sx_init(&t4_list_lock, "T4/T5 adapters");
 			SLIST_INIT(&t4_list);
+			callout_init(&fatal_callout, 1);
 #ifdef TCP_OFFLOAD
 			sx_init(&t4_uld_list_lock, "T4/T5 ULDs");
 			SLIST_INIT(&t4_uld_list);


More information about the svn-src-all mailing list