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