linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/15] net: taint when the device driver firmware crashes
@ 2020-05-09  4:35 Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 01/15] taint: add module firmware crash taint support Luis Chamberlain
                   ` (16 more replies)
  0 siblings, 17 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain

Device driver firmware can crash, and sometimes, this can leave your
system in a state which makes the device or subsystem completely
useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
of scraping some magical words from the kernel log, which is driver
specific, is much easier. So instead this series provides a helper which
lets drivers annotate this and shows how to use this on networking
drivers.

My methodology for finding when firmware crashes is to git grep for
"crash" and then doing some study of the code to see if this indeed
a place where the firmware crashes. In some places this is quite
obvious.

I'm starting off with networking first, if this gets merged later on I
can focus on the other drivers, but I already have some work done on
other subsytems.

Review, flames, etc are greatly appreciated.

This work, only on networking drivers, can be found on my git tree as well:

https://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux-next.git/log/?h=20200509-taint-firmware-net

Luis Chamberlain (15):
  taint: add module firmware crash taint support
  ethernet/839: use new module_firmware_crashed()
  bnx2x: use new module_firmware_crashed()
  bnxt: use new module_firmware_crashed()
  bna: use new module_firmware_crashed()
  liquidio: use new module_firmware_crashed()
  cxgb4: use new module_firmware_crashed()
  ehea: use new module_firmware_crashed()
  qed: use new module_firmware_crashed()
  soc: qcom: ipa: use new module_firmware_crashed()
  wimax/i2400m: use new module_firmware_crashed()
  ath10k: use new module_firmware_crashed()
  ath6kl: use new module_firmware_crashed()
  brcm80211: use new module_firmware_crashed()
  mwl8k: use new module_firmware_crashed()

 drivers/net/ethernet/8390/axnet_cs.c                |  4 +++-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c    |  1 +
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c   |  1 +
 drivers/net/ethernet/brocade/bna/bfa_ioc.c          |  1 +
 drivers/net/ethernet/cavium/liquidio/lio_main.c     |  1 +
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c     |  1 +
 drivers/net/ethernet/ibm/ehea/ehea_main.c           |  2 ++
 drivers/net/ethernet/qlogic/qed/qed_debug.c         |  3 +++
 drivers/net/ipa/ipa_modem.c                         |  1 +
 drivers/net/wimax/i2400m/rx.c                       |  1 +
 drivers/net/wireless/ath/ath10k/pci.c               |  2 ++
 drivers/net/wireless/ath/ath10k/sdio.c              |  2 ++
 drivers/net/wireless/ath/ath10k/snoc.c              |  1 +
 drivers/net/wireless/ath/ath6kl/hif.c               |  1 +
 .../net/wireless/broadcom/brcm80211/brcmfmac/core.c |  1 +
 drivers/net/wireless/marvell/mwl8k.c                |  1 +
 include/linux/kernel.h                              |  3 ++-
 include/linux/module.h                              | 13 +++++++++++++
 include/trace/events/module.h                       |  3 ++-
 kernel/module.c                                     |  5 +++--
 kernel/panic.c                                      |  1 +
 21 files changed, 44 insertions(+), 5 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* [PATCH 01/15] taint: add module firmware crash taint support
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09 15:18   ` Rafael Aquini
  2020-05-09  4:35 ` [PATCH 02/15] ethernet/839: use new module_firmware_crashed() Luis Chamberlain
                   ` (15 subsequent siblings)
  16 siblings, 1 reply; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain

Device driver firmware can crash, and sometimes, this can leave your
system in a state which makes the device or subsystem completely
useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
of scraping some magical words from the kernel log, which is driver
specific, is much easier. So instead provide a helper which lets drivers
annotate this.

Once this happens, scrapers can easily look for modules taint flags
for a firmware crash. This will taint both the kernel and respective
calling module.

The new helper module_firmware_crashed() uses LOCKDEP_STILL_OK as this
fact should in no way shape or form affect lockdep. This taint is device
driver specific.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 include/linux/kernel.h        |  3 ++-
 include/linux/module.h        | 13 +++++++++++++
 include/trace/events/module.h |  3 ++-
 kernel/module.c               |  5 +++--
 kernel/panic.c                |  1 +
 5 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 04a5885cec1b..19e1541c82c7 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -601,7 +601,8 @@ extern enum system_states {
 #define TAINT_LIVEPATCH			15
 #define TAINT_AUX			16
 #define TAINT_RANDSTRUCT		17
-#define TAINT_FLAGS_COUNT		18
+#define TAINT_FIRMWARE_CRASH		18
+#define TAINT_FLAGS_COUNT		19
 
 struct taint_flag {
 	char c_true;	/* character printed when tainted */
diff --git a/include/linux/module.h b/include/linux/module.h
index 2c2e988bcf10..221200078180 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -697,6 +697,14 @@ static inline bool is_livepatch_module(struct module *mod)
 bool is_module_sig_enforced(void);
 void set_module_sig_enforced(void);
 
+void add_taint_module(struct module *mod, unsigned flag,
+		      enum lockdep_ok lockdep_ok);
+
+static inline void module_firmware_crashed(void)
+{
+	add_taint_module(THIS_MODULE, TAINT_FIRMWARE_CRASH, LOCKDEP_STILL_OK);
+}
+
 #else /* !CONFIG_MODULES... */
 
 static inline struct module *__module_address(unsigned long addr)
@@ -844,6 +852,11 @@ void *dereference_module_function_descriptor(struct module *mod, void *ptr)
 	return ptr;
 }
 
+static inline void module_firmware_crashed(void)
+{
+	add_taint(TAINT_FIRMWARE_CRASH, LOCKDEP_STILL_OK);
+}
+
 #endif /* CONFIG_MODULES */
 
 #ifdef CONFIG_SYSFS
diff --git a/include/trace/events/module.h b/include/trace/events/module.h
index 097485c73c01..b749ea25affd 100644
--- a/include/trace/events/module.h
+++ b/include/trace/events/module.h
@@ -26,7 +26,8 @@ struct module;
 	{ (1UL << TAINT_OOT_MODULE),		"O" },		\
 	{ (1UL << TAINT_FORCED_MODULE),		"F" },		\
 	{ (1UL << TAINT_CRAP),			"C" },		\
-	{ (1UL << TAINT_UNSIGNED_MODULE),	"E" })
+	{ (1UL << TAINT_UNSIGNED_MODULE),	"E" },		\
+	{ (1UL << TAINT_FIRMWARE_CRASH),	"Q" })
 
 TRACE_EVENT(module_load,
 
diff --git a/kernel/module.c b/kernel/module.c
index 80faaf2116dd..f98e8c25c6b4 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -325,12 +325,13 @@ static inline int strong_try_module_get(struct module *mod)
 		return -ENOENT;
 }
 
-static inline void add_taint_module(struct module *mod, unsigned flag,
-				    enum lockdep_ok lockdep_ok)
+void add_taint_module(struct module *mod, unsigned flag,
+		      enum lockdep_ok lockdep_ok)
 {
 	add_taint(flag, lockdep_ok);
 	set_bit(flag, &mod->taints);
 }
+EXPORT_SYMBOL_GPL(add_taint_module);
 
 /*
  * A thread that wants to hold a reference to a module only while it
diff --git a/kernel/panic.c b/kernel/panic.c
index ec6d7d788ce7..504fb926947e 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -384,6 +384,7 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
 	[ TAINT_LIVEPATCH ]		= { 'K', ' ', true },
 	[ TAINT_AUX ]			= { 'X', ' ', true },
 	[ TAINT_RANDSTRUCT ]		= { 'T', ' ', true },
+	[ TAINT_FIRMWARE_CRASH ]	= { 'Q', ' ', true },
 };
 
 /**
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 02/15] ethernet/839: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 01/15] taint: add module firmware crash taint support Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 03/15] bnx2x: " Luis Chamberlain
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Michael S. Tsirkin,
	Shannon Nelson, Jakub Kicinski, Heiner Kallweit

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Shannon Nelson <snelson@pensando.io>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/8390/axnet_cs.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/8390/axnet_cs.c b/drivers/net/ethernet/8390/axnet_cs.c
index aeae7966a082..8ad0200db8e9 100644
--- a/drivers/net/ethernet/8390/axnet_cs.c
+++ b/drivers/net/ethernet/8390/axnet_cs.c
@@ -1358,9 +1358,11 @@ static void ei_receive(struct net_device *dev)
 		 */
 		if ((netif_msg_rx_err(ei_local)) &&
 		    this_frame != ei_local->current_page &&
-		    (this_frame != 0x0 || rxing_page != 0xFF))
+		    (this_frame != 0x0 || rxing_page != 0xFF)) {
+			module_firmware_crashed();
 			netdev_err(dev, "mismatched read page pointers %2x vs %2x\n",
 				   this_frame, ei_local->current_page);
+		}
 		
 		if (this_frame == rxing_page)	/* Read all the frames? */
 			break;				/* Done for now */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 03/15] bnx2x: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 01/15] taint: add module firmware crash taint support Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 02/15] ethernet/839: use new module_firmware_crashed() Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 04/15] bnxt: " Luis Chamberlain
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Ariel Elior,
	Sudarsana Kalluru, GR-everest-linux-l2

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Ariel Elior <aelior@marvell.com>
Cc: Sudarsana Kalluru <skalluru@marvell.com>
CC: GR-everest-linux-l2@marvell.com
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index db5107e7937c..c38b8c9c8af0 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -909,6 +909,7 @@ void bnx2x_panic_dump(struct bnx2x *bp, bool disable_int)
 	bp->eth_stats.unrecoverable_error++;
 	DP(BNX2X_MSG_STATS, "stats_state - DISABLED\n");
 
+	module_firmware_crashed();
 	BNX2X_ERR("begin crash dump -----------------\n");
 
 	/* Indices */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 04/15] bnxt: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (2 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 03/15] bnx2x: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 05/15] bna: " Luis Chamberlain
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Michael Chan

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index dd0c3f227009..5ba1bd0734e9 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -3503,6 +3503,7 @@ static int bnxt_get_dump_data(struct net_device *dev, struct ethtool_dump *dump,
 
 	dump->flag = bp->dump_flag;
 	if (dump->flag == BNXT_DUMP_CRASH) {
+		module_firmware_crashed();
 #ifdef CONFIG_TEE_BNXT_FW
 		return tee_bnxt_copy_coredump(buf, 0, dump->len);
 #endif
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 05/15] bna: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (3 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 04/15] bnxt: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 06/15] liquidio: " Luis Chamberlain
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Rasesh Mody,
	Sudarsana Kalluru, GR-Linux-NIC-Dev

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Rasesh Mody <rmody@marvell.com>
Cc: Sudarsana Kalluru <skalluru@marvell.com>
Cc: GR-Linux-NIC-Dev@marvell.com
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/brocade/bna/bfa_ioc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
index e17bfc87da90..b3f44a912574 100644
--- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c
+++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
@@ -927,6 +927,7 @@ bfa_iocpf_sm_disabled(struct bfa_iocpf *iocpf, enum iocpf_event event)
 static void
 bfa_iocpf_sm_initfail_sync_entry(struct bfa_iocpf *iocpf)
 {
+	module_firmware_crashed();
 	bfa_nw_ioc_debug_save_ftrc(iocpf->ioc);
 	bfa_ioc_hw_sem_get(iocpf->ioc);
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 06/15] liquidio: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (4 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 05/15] bna: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 07/15] cxgb4: " Luis Chamberlain
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Derek Chickles,
	Satanand Burla, Felix Manlunas

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Derek Chickles <dchickles@marvell.com>
Cc: Satanand Burla <sburla@marvell.com>
Cc: Felix Manlunas <fmanlunas@marvell.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/cavium/liquidio/lio_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c
index 66d31c018c7e..f18085262982 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c
@@ -801,6 +801,7 @@ static int liquidio_watchdog(void *param)
 			continue;
 
 		WRITE_ONCE(oct->cores_crashed, true);
+		module_firmware_crashed();
 		other_oct = get_other_octeon_device(oct);
 		if (other_oct)
 			WRITE_ONCE(other_oct->cores_crashed, true);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 07/15] cxgb4: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (5 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 06/15] liquidio: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 08/15] ehea: " Luis Chamberlain
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Vishal Kulkarni

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Vishal Kulkarni <vishal@chelsio.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index a70018f067aa..c67fc86c0e42 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -3646,6 +3646,7 @@ void t4_fatal_err(struct adapter *adap)
 	 * could be exposed to the adapter.  RDMA MWs for example...
 	 */
 	t4_shutdown_adapter(adap);
+	module_firmware_crashed();
 	for_each_port(adap, port) {
 		struct net_device *dev = adap->port[port];
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 08/15] ehea: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (6 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 07/15] cxgb4: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 09/15] qed: " Luis Chamberlain
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Douglas Miller

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Douglas Miller <dougmill@linux.ibm.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/ibm/ehea/ehea_main.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
index 0273fb7a9d01..6ae35067003f 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -3285,6 +3285,8 @@ static void ehea_crash_handler(void)
 {
 	int i;
 
+	module_firmware_crashed();
+
 	if (ehea_fw_handles.arr)
 		for (i = 0; i < ehea_fw_handles.num_entries; i++)
 			ehea_h_free_resource(ehea_fw_handles.arr[i].adh,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (7 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 08/15] ehea: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  6:32   ` [EXT] " Igor Russkikh
  2020-05-09  4:35 ` [PATCH 10/15] soc: qcom: ipa: " Luis Chamberlain
                   ` (7 subsequent siblings)
  16 siblings, 1 reply; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Ariel Elior,
	GR-everest-linux-l2

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Ariel Elior <aelior@marvell.com>
Cc: GR-everest-linux-l2@marvell.com
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ethernet/qlogic/qed/qed_debug.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c b/drivers/net/ethernet/qlogic/qed/qed_debug.c
index f4eebaabb6d0..9cc6287b889b 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
@@ -7854,6 +7854,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void *buffer)
 						 REGDUMP_HEADER_SIZE,
 						 &feature_size);
 		if (!rc) {
+			module_firmware_crashed();
 			*(u32 *)((u8 *)buffer + offset) =
 			    qed_calc_regdump_header(cdev, PROTECTION_OVERRIDE,
 						    cur_engine,
@@ -7869,6 +7870,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void *buffer)
 		rc = qed_dbg_fw_asserts(cdev, (u8 *)buffer + offset +
 					REGDUMP_HEADER_SIZE, &feature_size);
 		if (!rc) {
+			module_firmware_crashed();
 			*(u32 *)((u8 *)buffer + offset) =
 			    qed_calc_regdump_header(cdev, FW_ASSERTS,
 						    cur_engine, feature_size,
@@ -7906,6 +7908,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void *buffer)
 		rc = qed_dbg_grc(cdev, (u8 *)buffer + offset +
 				 REGDUMP_HEADER_SIZE, &feature_size);
 		if (!rc) {
+			module_firmware_crashed();
 			*(u32 *)((u8 *)buffer + offset) =
 			    qed_calc_regdump_header(cdev, GRC_DUMP,
 						    cur_engine,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 10/15] soc: qcom: ipa: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (8 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 09/15] qed: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 11/15] wimax/i2400m: " Luis Chamberlain
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, Alex Elder

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: Alex Elder <elder@kernel.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/ipa/ipa_modem.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ipa/ipa_modem.c b/drivers/net/ipa/ipa_modem.c
index ed10818dd99f..1790b87446ed 100644
--- a/drivers/net/ipa/ipa_modem.c
+++ b/drivers/net/ipa/ipa_modem.c
@@ -285,6 +285,7 @@ static void ipa_modem_crashed(struct ipa *ipa)
 	struct device *dev = &ipa->pdev->dev;
 	int ret;
 
+	module_firmware_crashed();
 	ipa_endpoint_modem_pause_all(ipa, true);
 
 	ipa_endpoint_modem_hol_block_clear_all(ipa);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 11/15] wimax/i2400m: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (9 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 10/15] soc: qcom: ipa: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 12/15] ath10k: " Luis Chamberlain
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, linux-wimax,
	Inaky Perez-Gonzalez

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: linux-wimax@intel.com
Cc: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/wimax/i2400m/rx.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wimax/i2400m/rx.c b/drivers/net/wimax/i2400m/rx.c
index c9fb619a9e01..307a62ca183f 100644
--- a/drivers/net/wimax/i2400m/rx.c
+++ b/drivers/net/wimax/i2400m/rx.c
@@ -712,6 +712,7 @@ void __i2400m_roq_queue(struct i2400m *i2400m, struct i2400m_roq *roq,
 	dev_err(dev, "SW BUG? failed to insert packet\n");
 	dev_err(dev, "ERX: roq %p [ws %u] skb %p nsn %d sn %u\n",
 		roq, roq->ws, skb, nsn, roq_data->sn);
+	module_firmware_crashed();
 	skb_queue_walk(&roq->queue, skb_itr) {
 		roq_data_itr = (struct i2400m_roq_data *) &skb_itr->cb;
 		nsn_itr = __i2400m_roq_nsn(roq, roq_data_itr->sn);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 12/15] ath10k: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (10 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 11/15] wimax/i2400m: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 13/15] ath6kl: " Luis Chamberlain
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, linux-wireless, ath10k

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: linux-wireless@vger.kernel.org
Cc: ath10k@lists.infradead.org
Cc: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/wireless/ath/ath10k/pci.c  | 2 ++
 drivers/net/wireless/ath/ath10k/sdio.c | 2 ++
 drivers/net/wireless/ath/ath10k/snoc.c | 1 +
 3 files changed, 5 insertions(+)

diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 1d941d53fdc9..6bd0f3b518b9 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -1767,6 +1767,7 @@ static void ath10k_pci_fw_dump_work(struct work_struct *work)
 		scnprintf(guid, sizeof(guid), "n/a");
 
 	ath10k_err(ar, "firmware crashed! (guid %s)\n", guid);
+	module_firmware_crashed();
 	ath10k_print_driver_info(ar);
 	ath10k_pci_dump_registers(ar, crash_data);
 	ath10k_ce_dump_registers(ar, crash_data);
@@ -2837,6 +2838,7 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar,
 	if (ret) {
 		if (ath10k_pci_has_fw_crashed(ar)) {
 			ath10k_warn(ar, "firmware crashed during chip reset\n");
+			module_firmware_crashed();
 			ath10k_pci_fw_crashed_clear(ar);
 			ath10k_pci_fw_crashed_dump(ar);
 		}
diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
index e2aff2254a40..d34ad289380f 100644
--- a/drivers/net/wireless/ath/ath10k/sdio.c
+++ b/drivers/net/wireless/ath/ath10k/sdio.c
@@ -794,6 +794,7 @@ static int ath10k_sdio_mbox_proc_dbg_intr(struct ath10k *ar)
 
 	/* TODO: Add firmware crash handling */
 	ath10k_warn(ar, "firmware crashed\n");
+	module_firmware_crashed();
 
 	/* read counter to clear the interrupt, the debug error interrupt is
 	 * counter 0.
@@ -915,6 +916,7 @@ static int ath10k_sdio_mbox_proc_cpu_intr(struct ath10k *ar)
 	if (cpu_int_status & MBOX_CPU_STATUS_ENABLE_ASSERT_MASK) {
 		ath10k_err(ar, "firmware crashed!\n");
 		queue_work(ar->workqueue, &ar->restart_work);
+		module_firmware_crashed();
 	}
 	return ret;
 }
diff --git a/drivers/net/wireless/ath/ath10k/snoc.c b/drivers/net/wireless/ath/ath10k/snoc.c
index 354d49b1cd45..7cfc123c345c 100644
--- a/drivers/net/wireless/ath/ath10k/snoc.c
+++ b/drivers/net/wireless/ath/ath10k/snoc.c
@@ -1451,6 +1451,7 @@ void ath10k_snoc_fw_crashed_dump(struct ath10k *ar)
 		scnprintf(guid, sizeof(guid), "n/a");
 
 	ath10k_err(ar, "firmware crashed! (guid %s)\n", guid);
+	module_firmware_crashed();
 	ath10k_print_driver_info(ar);
 	ath10k_msa_dump_memory(ar, crash_data);
 	mutex_unlock(&ar->dump_mutex);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 13/15] ath6kl: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (11 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 12/15] ath10k: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 14/15] brcm80211: " Luis Chamberlain
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, linux-wireless, ath10k

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: linux-wireless@vger.kernel.org
Cc: ath10k@lists.infradead.org
Cc: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/wireless/ath/ath6kl/hif.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/ath/ath6kl/hif.c b/drivers/net/wireless/ath/ath6kl/hif.c
index d1942537ea10..cfd838607544 100644
--- a/drivers/net/wireless/ath/ath6kl/hif.c
+++ b/drivers/net/wireless/ath/ath6kl/hif.c
@@ -120,6 +120,7 @@ static int ath6kl_hif_proc_dbg_intr(struct ath6kl_device *dev)
 	int ret;
 
 	ath6kl_warn("firmware crashed\n");
+	module_firmware_crashed();
 
 	/*
 	 * read counter to clear the interrupt, the debug error interrupt is
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 14/15] brcm80211: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (12 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 13/15] ath6kl: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09  4:35 ` [PATCH 15/15] mwl8k: " Luis Chamberlain
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, linux-wireless,
	brcm80211-dev-list.pdl, brcm80211-dev-list, Arend van Spriel,
	Franky Lin, Hante Meuleman, Chi-Hsien Lin, Wright Feng,
	Rafał Miłecki, Pieter-Paul Giesberts

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: linux-wireless@vger.kernel.org
Cc: brcm80211-dev-list.pdl@broadcom.com
Cc: brcm80211-dev-list@cypress.com
Cc: Arend van Spriel <arend.vanspriel@broadcom.com>
Cc: Franky Lin <franky.lin@broadcom.com>
Cc: Hante Meuleman <hante.meuleman@broadcom.com>
Cc: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
Cc: Wright Feng <wright.feng@cypress.com>
Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: "Rafał Miłecki" <rafal@milecki.pl>
Cc: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index c88655acc78c..d623f83568b3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -1393,6 +1393,7 @@ void brcmf_fw_crashed(struct device *dev)
 	struct brcmf_pub *drvr = bus_if->drvr;
 
 	bphy_err(drvr, "Firmware has halted or crashed\n");
+	module_firmware_crashed();
 
 	brcmf_dev_coredump(dev);
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 15/15] mwl8k: use new module_firmware_crashed()
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (13 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 14/15] brcm80211: " Luis Chamberlain
@ 2020-05-09  4:35 ` Luis Chamberlain
  2020-05-09 18:35 ` [PATCH 00/15] net: taint when the device driver firmware crashes Jakub Kicinski
  2020-05-10  1:01 ` Shannon Nelson
  16 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09  4:35 UTC (permalink / raw)
  To: jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Luis Chamberlain, linux-wireless,
	Lennert Buytenhek, Gustavo A. R. Silva, Johannes Berg,
	Ganapathi Bhat

This makes use of the new module_firmware_crashed() to help
annotate when firmware for device drivers crash. When firmware
crashes devices can sometimes become unresponsive, and recovery
sometimes requires a driver unload / reload and in the worst cases
a reboot.

Using a taint flag allows us to annotate when this happens clearly.

Cc: linux-wireless@vger.kernel.org
Cc: Lennert Buytenhek <buytenh@wantstofly.org>
Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: Johannes Berg <johannes.berg@intel.com>
Cc: Ganapathi Bhat <ganapathi.bhat@nxp.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 drivers/net/wireless/marvell/mwl8k.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
index 97f23f93f6e7..d609ef1bb879 100644
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
@@ -1551,6 +1551,7 @@ static int mwl8k_tx_wait_empty(struct ieee80211_hw *hw)
 	 * the firmware has crashed
 	 */
 	if (priv->hw_restart_in_progress) {
+		module_firmware_crashed();
 		if (priv->hw_restart_owner == current)
 			return 0;
 		else
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [EXT] [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-09  4:35 ` [PATCH 09/15] qed: " Luis Chamberlain
@ 2020-05-09  6:32   ` Igor Russkikh
  2020-05-09 16:42     ` Luis Chamberlain
  0 siblings, 1 reply; 33+ messages in thread
From: Igor Russkikh @ 2020-05-09  6:32 UTC (permalink / raw)
  To: Luis Chamberlain, jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel, Ariel Elior, GR-everest-linux-l2


> This makes use of the new module_firmware_crashed() to help
> annotate when firmware for device drivers crash. When firmware
> crashes devices can sometimes become unresponsive, and recovery
> sometimes requires a driver unload / reload and in the worst cases
> a reboot.
> 
> Using a taint flag allows us to annotate when this happens clearly.
> 
> Cc: Ariel Elior <aelior@marvell.com>
> Cc: GR-everest-linux-l2@marvell.com
> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
> ---
>  drivers/net/ethernet/qlogic/qed/qed_debug.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> index f4eebaabb6d0..9cc6287b889b 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> @@ -7854,6 +7854,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> *buffer)
>  						 REGDUMP_HEADER_SIZE,
>  						 &feature_size);
>  		if (!rc) {
> +			module_firmware_crashed();
>  			*(u32 *)((u8 *)buffer + offset) =
>  			    qed_calc_regdump_header(cdev,
> PROTECTION_OVERRIDE,
>  						    cur_engine,
> @@ -7869,6 +7870,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> *buffer)
>  		rc = qed_dbg_fw_asserts(cdev, (u8 *)buffer + offset +
>  					REGDUMP_HEADER_SIZE,
> &feature_size);
>  		if (!rc) {
> +			module_firmware_crashed();
>  			*(u32 *)((u8 *)buffer + offset) =
>  			    qed_calc_regdump_header(cdev, FW_ASSERTS,
>  						    cur_engine,
> feature_size,
> @@ -7906,6 +7908,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> *buffer)
>  		rc = qed_dbg_grc(cdev, (u8 *)buffer + offset +
>  				 REGDUMP_HEADER_SIZE, &feature_size);
>  		if (!rc) {
> +			module_firmware_crashed();
>  			*(u32 *)((u8 *)buffer + offset) =
>  			    qed_calc_regdump_header(cdev, GRC_DUMP,
>  						    cur_engine,


Hi Luis,

qed_dbg_all_data is being used to gather debug dump from device. Failures
inside it may happen due to various reasons, but they normally do not indicate
FW failure.

So I think its not a good place to insert this call.

Its hard to find exact good place to insert it in qed.

One more thing is that AFAIU taint flag gets permanent on kernel, but for
example our device can recover itself from some FW crashes, thus it'd be
transparent for user.

Whats the logical purpose of module_firmware_crashed? Does it mean fatal
unrecoverable error on device?

Thanks,
  Igor


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 01/15] taint: add module firmware crash taint support
  2020-05-09  4:35 ` [PATCH 01/15] taint: add module firmware crash taint support Luis Chamberlain
@ 2020-05-09 15:18   ` Rafael Aquini
  2020-05-09 16:46     ` Luis Chamberlain
  0 siblings, 1 reply; 33+ messages in thread
From: Rafael Aquini @ 2020-05-09 15:18 UTC (permalink / raw)
  To: Luis Chamberlain
  Cc: jeyu, akpm, arnd, rostedt, mingo, cai, dyoung, bhe, peterz, tglx,
	gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko, keescook,
	daniel.vetter, will, mchehab+samsung, kvalo, davem, netdev,
	linux-kernel

On Sat, May 09, 2020 at 04:35:38AM +0000, Luis Chamberlain wrote:
> Device driver firmware can crash, and sometimes, this can leave your
> system in a state which makes the device or subsystem completely
> useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
> of scraping some magical words from the kernel log, which is driver
> specific, is much easier. So instead provide a helper which lets drivers
> annotate this.
> 
> Once this happens, scrapers can easily look for modules taint flags
> for a firmware crash. This will taint both the kernel and respective
> calling module.
> 
> The new helper module_firmware_crashed() uses LOCKDEP_STILL_OK as this
> fact should in no way shape or form affect lockdep. This taint is device
> driver specific.
> 
> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
> ---
>  include/linux/kernel.h        |  3 ++-
>  include/linux/module.h        | 13 +++++++++++++
>  include/trace/events/module.h |  3 ++-
>  kernel/module.c               |  5 +++--
>  kernel/panic.c                |  1 +
>  5 files changed, 21 insertions(+), 4 deletions(-)
> 
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 04a5885cec1b..19e1541c82c7 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -601,7 +601,8 @@ extern enum system_states {
>  #define TAINT_LIVEPATCH			15
>  #define TAINT_AUX			16
>  #define TAINT_RANDSTRUCT		17
> -#define TAINT_FLAGS_COUNT		18
> +#define TAINT_FIRMWARE_CRASH		18
> +#define TAINT_FLAGS_COUNT		19
>

We are still missing the documentation bits for this
new flag, though.

How about having a blurb similar to:

diff --git a/Documentation/admin-guide/tainted-kernels.rst b/Documentation/admin-guide/tainted-kernels.rst
index 71e9184a9079..5c6a9e2478b0 100644
--- a/Documentation/admin-guide/tainted-kernels.rst
+++ b/Documentation/admin-guide/tainted-kernels.rst
@@ -100,6 +100,7 @@ Bit  Log  Number  Reason that got the kernel tainted
  15  _/K   32768  kernel has been live patched
  16  _/X   65536  auxiliary taint, defined for and used by distros
  17  _/T  131072  kernel was built with the struct randomization plugin
+ 18  _/Q  262144  driver firmware crash annotation
 ===  ===  ======  ========================================================

 Note: The character ``_`` is representing a blank in this table to make reading
@@ -162,3 +163,7 @@ More detailed explanation for tainting
      produce extremely unusual kernel structure layouts (even performance
      pathological ones), which is important to know when debugging. Set at
      build time.
+
+ 18) ``Q`` Device drivers might annotate the kernel with this taint, in cases
+     their firmware might have crashed leaving the driver in a crippled and
+     potentially useless state.




>  struct taint_flag {
>  	char c_true;	/* character printed when tainted */
> diff --git a/include/linux/module.h b/include/linux/module.h
> index 2c2e988bcf10..221200078180 100644
> --- a/include/linux/module.h
> +++ b/include/linux/module.h
> @@ -697,6 +697,14 @@ static inline bool is_livepatch_module(struct module *mod)
>  bool is_module_sig_enforced(void);
>  void set_module_sig_enforced(void);
>  
> +void add_taint_module(struct module *mod, unsigned flag,
> +		      enum lockdep_ok lockdep_ok);
> +
> +static inline void module_firmware_crashed(void)
> +{
> +	add_taint_module(THIS_MODULE, TAINT_FIRMWARE_CRASH, LOCKDEP_STILL_OK);
> +}
> +
>  #else /* !CONFIG_MODULES... */
>  
>  static inline struct module *__module_address(unsigned long addr)
> @@ -844,6 +852,11 @@ void *dereference_module_function_descriptor(struct module *mod, void *ptr)
>  	return ptr;
>  }
>  
> +static inline void module_firmware_crashed(void)
> +{
> +	add_taint(TAINT_FIRMWARE_CRASH, LOCKDEP_STILL_OK);
> +}
> +
>  #endif /* CONFIG_MODULES */
>  
>  #ifdef CONFIG_SYSFS
> diff --git a/include/trace/events/module.h b/include/trace/events/module.h
> index 097485c73c01..b749ea25affd 100644
> --- a/include/trace/events/module.h
> +++ b/include/trace/events/module.h
> @@ -26,7 +26,8 @@ struct module;
>  	{ (1UL << TAINT_OOT_MODULE),		"O" },		\
>  	{ (1UL << TAINT_FORCED_MODULE),		"F" },		\
>  	{ (1UL << TAINT_CRAP),			"C" },		\
> -	{ (1UL << TAINT_UNSIGNED_MODULE),	"E" })
> +	{ (1UL << TAINT_UNSIGNED_MODULE),	"E" },		\
> +	{ (1UL << TAINT_FIRMWARE_CRASH),	"Q" })
>  
>  TRACE_EVENT(module_load,
>  
> diff --git a/kernel/module.c b/kernel/module.c
> index 80faaf2116dd..f98e8c25c6b4 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -325,12 +325,13 @@ static inline int strong_try_module_get(struct module *mod)
>  		return -ENOENT;
>  }
>  
> -static inline void add_taint_module(struct module *mod, unsigned flag,
> -				    enum lockdep_ok lockdep_ok)
> +void add_taint_module(struct module *mod, unsigned flag,
> +		      enum lockdep_ok lockdep_ok)
>  {
>  	add_taint(flag, lockdep_ok);
>  	set_bit(flag, &mod->taints);
>  }
> +EXPORT_SYMBOL_GPL(add_taint_module);
>  
>  /*
>   * A thread that wants to hold a reference to a module only while it
> diff --git a/kernel/panic.c b/kernel/panic.c
> index ec6d7d788ce7..504fb926947e 100644
> --- a/kernel/panic.c
> +++ b/kernel/panic.c
> @@ -384,6 +384,7 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
>  	[ TAINT_LIVEPATCH ]		= { 'K', ' ', true },
>  	[ TAINT_AUX ]			= { 'X', ' ', true },
>  	[ TAINT_RANDSTRUCT ]		= { 'T', ' ', true },
> +	[ TAINT_FIRMWARE_CRASH ]	= { 'Q', ' ', true },
>  };
>  
>  /**
> -- 
> 2.25.1
> 


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [EXT] [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-09  6:32   ` [EXT] " Igor Russkikh
@ 2020-05-09 16:42     ` Luis Chamberlain
  2020-05-12 16:23       ` Igor Russkikh
  0 siblings, 1 reply; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09 16:42 UTC (permalink / raw)
  To: Igor Russkikh
  Cc: jeyu, akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe,
	peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel, Ariel Elior,
	GR-everest-linux-l2

On Sat, May 09, 2020 at 09:32:51AM +0300, Igor Russkikh wrote:
> 
> > This makes use of the new module_firmware_crashed() to help
> > annotate when firmware for device drivers crash. When firmware
> > crashes devices can sometimes become unresponsive, and recovery
> > sometimes requires a driver unload / reload and in the worst cases
> > a reboot.
> > 
> > Using a taint flag allows us to annotate when this happens clearly.
> > 
> > Cc: Ariel Elior <aelior@marvell.com>
> > Cc: GR-everest-linux-l2@marvell.com
> > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
> > ---
> >  drivers/net/ethernet/qlogic/qed/qed_debug.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > index f4eebaabb6d0..9cc6287b889b 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > @@ -7854,6 +7854,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> > *buffer)
> >  						 REGDUMP_HEADER_SIZE,
> >  						 &feature_size);
> >  		if (!rc) {
> > +			module_firmware_crashed();
> >  			*(u32 *)((u8 *)buffer + offset) =
> >  			    qed_calc_regdump_header(cdev,
> > PROTECTION_OVERRIDE,
> >  						    cur_engine,
> > @@ -7869,6 +7870,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> > *buffer)
> >  		rc = qed_dbg_fw_asserts(cdev, (u8 *)buffer + offset +
> >  					REGDUMP_HEADER_SIZE,
> > &feature_size);
> >  		if (!rc) {
> > +			module_firmware_crashed();
> >  			*(u32 *)((u8 *)buffer + offset) =
> >  			    qed_calc_regdump_header(cdev, FW_ASSERTS,
> >  						    cur_engine,
> > feature_size,
> > @@ -7906,6 +7908,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> > *buffer)
> >  		rc = qed_dbg_grc(cdev, (u8 *)buffer + offset +
> >  				 REGDUMP_HEADER_SIZE, &feature_size);
> >  		if (!rc) {
> > +			module_firmware_crashed();
> >  			*(u32 *)((u8 *)buffer + offset) =
> >  			    qed_calc_regdump_header(cdev, GRC_DUMP,
> >  						    cur_engine,
> 
> 
> Hi Luis,
> 
> qed_dbg_all_data is being used to gather debug dump from device. Failures
> inside it may happen due to various reasons, but they normally do not indicate
> FW failure.
> 
> So I think its not a good place to insert this call.
> Its hard to find exact good place to insert it in qed.

Is there a way to check if what happened was indeed a fw crash?

> One more thing is that AFAIU taint flag gets permanent on kernel, but for
> example our device can recover itself from some FW crashes, thus it'd be
> transparent for user.

Similar things are *supposed* to recoverable with other device, however
this can also sometimes lead to a situation where devices are not usable
anymore, and require a full driver unload / load.

> Whats the logical purpose of module_firmware_crashed? Does it mean fatal
> unrecoverable error on device?

Its just to annotate on the module and kernel that this has happened.

I take it you may agree that, firmware crashing *often* is not good design,
and these issues should be reported to / fixed by vendors. In cases
where driver bugs are reported it is good to see if a firmware crash has
happened before, so that during analysis this is ruled out.

  Luis

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 01/15] taint: add module firmware crash taint support
  2020-05-09 15:18   ` Rafael Aquini
@ 2020-05-09 16:46     ` Luis Chamberlain
  2020-05-10  2:19       ` Randy Dunlap
  0 siblings, 1 reply; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-09 16:46 UTC (permalink / raw)
  To: Rafael Aquini
  Cc: jeyu, akpm, arnd, rostedt, mingo, cai, dyoung, bhe, peterz, tglx,
	gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko, keescook,
	daniel.vetter, will, mchehab+samsung, kvalo, davem, netdev,
	linux-kernel

On Sat, May 09, 2020 at 11:18:29AM -0400, Rafael Aquini wrote:
> We are still missing the documentation bits for this
> new flag, though.

Ah yeah sorry about that.

> How about having a blurb similar to:
> 
> diff --git a/Documentation/admin-guide/tainted-kernels.rst b/Documentation/admin-guide/tainted-kernels.rst
> index 71e9184a9079..5c6a9e2478b0 100644
> --- a/Documentation/admin-guide/tainted-kernels.rst
> +++ b/Documentation/admin-guide/tainted-kernels.rst
> @@ -100,6 +100,7 @@ Bit  Log  Number  Reason that got the kernel tainted
>   15  _/K   32768  kernel has been live patched
>   16  _/X   65536  auxiliary taint, defined for and used by distros
>   17  _/T  131072  kernel was built with the struct randomization plugin
> + 18  _/Q  262144  driver firmware crash annotation
>  ===  ===  ======  ========================================================
> 
>  Note: The character ``_`` is representing a blank in this table to make reading
> @@ -162,3 +163,7 @@ More detailed explanation for tainting
>       produce extremely unusual kernel structure layouts (even performance
>       pathological ones), which is important to know when debugging. Set at
>       build time.
> +
> + 18) ``Q`` Device drivers might annotate the kernel with this taint, in cases
> +     their firmware might have crashed leaving the driver in a crippled and
> +     potentially useless state.

Sure, I'll modify it a bit to add the use case to help with support
issues, ie, to help rule out firmware issues.

I'm starting to think that to make this even more usesul later we may
want to add a uevent to add_taint() so that userspace can decide to look
into this, ignore it, or report something to the user, say on their
desktop.

  Luis

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 00/15] net: taint when the device driver firmware crashes
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (14 preceding siblings ...)
  2020-05-09  4:35 ` [PATCH 15/15] mwl8k: " Luis Chamberlain
@ 2020-05-09 18:35 ` Jakub Kicinski
  2020-05-11 14:11   ` Luis Chamberlain
  2020-05-10  1:01 ` Shannon Nelson
  16 siblings, 1 reply; 33+ messages in thread
From: Jakub Kicinski @ 2020-05-09 18:35 UTC (permalink / raw)
  To: Luis Chamberlain, Jiri Pirko
  Cc: jeyu, akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe,
	peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel

On Sat,  9 May 2020 04:35:37 +0000 Luis Chamberlain wrote:
> Device driver firmware can crash, and sometimes, this can leave your
> system in a state which makes the device or subsystem completely
> useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
> of scraping some magical words from the kernel log, which is driver
> specific, is much easier. So instead this series provides a helper which
> lets drivers annotate this and shows how to use this on networking
> drivers.
> 
> My methodology for finding when firmware crashes is to git grep for
> "crash" and then doing some study of the code to see if this indeed
> a place where the firmware crashes. In some places this is quite
> obvious.
> 
> I'm starting off with networking first, if this gets merged later on I
> can focus on the other drivers, but I already have some work done on
> other subsytems.
> 
> Review, flames, etc are greatly appreciated.

Tainting itself may be useful, but that's just the first step. I'd much
rather see folks start using the devlink health infrastructure. Devlink
is netlink based, but it's _not_ networking specific (many of its
optional features obviously are, but don't let that mislead you).

With devlink health we get (a) a standard notification on the failure; 
(b) information/state dump in a (somewhat) structured form, which can be
collected & shared with vendors; (c) automatic remediation (usually
device reset of some scope).

Now regarding the tainting - as I said it may be useful, but don't we
have to define what constitutes a "firmware crash"? There are many
failure modes, some perfectly recoverable (e.g. processing queue hang), 
some mere bugs (e.g. device fails to initialize some functions). All of
them may impact the functioning of the system. How do we choose those
that taint? 


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 00/15] net: taint when the device driver firmware crashes
  2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
                   ` (15 preceding siblings ...)
  2020-05-09 18:35 ` [PATCH 00/15] net: taint when the device driver firmware crashes Jakub Kicinski
@ 2020-05-10  1:01 ` Shannon Nelson
  2020-05-10  1:58   ` Andrew Lunn
  2020-05-11 19:21   ` Steven Rostedt
  16 siblings, 2 replies; 33+ messages in thread
From: Shannon Nelson @ 2020-05-10  1:01 UTC (permalink / raw)
  To: Luis Chamberlain, jeyu
  Cc: akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe, peterz,
	tglx, gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko,
	keescook, daniel.vetter, will, mchehab+samsung, kvalo, davem,
	netdev, linux-kernel

On 5/8/20 9:35 PM, Luis Chamberlain wrote:
> Device driver firmware can crash, and sometimes, this can leave your
> system in a state which makes the device or subsystem completely
> useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
> of scraping some magical words from the kernel log, which is driver
> specific, is much easier. So instead this series provides a helper which
> lets drivers annotate this and shows how to use this on networking
> drivers.
>
If the driver is able to detect that the device firmware has come back 
alive, through user intervention or whatever, should there be a way to 
"untaint" the kernel?  Or would you expect it to remain tainted?

sln


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 00/15] net: taint when the device driver firmware crashes
  2020-05-10  1:01 ` Shannon Nelson
@ 2020-05-10  1:58   ` Andrew Lunn
  2020-05-10  2:15     ` Shannon Nelson
  2020-05-11 19:21   ` Steven Rostedt
  1 sibling, 1 reply; 33+ messages in thread
From: Andrew Lunn @ 2020-05-10  1:58 UTC (permalink / raw)
  To: Shannon Nelson
  Cc: Luis Chamberlain, jeyu, akpm, arnd, rostedt, mingo, aquini, cai,
	dyoung, bhe, peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel

On Sat, May 09, 2020 at 06:01:51PM -0700, Shannon Nelson wrote:
> On 5/8/20 9:35 PM, Luis Chamberlain wrote:
> > Device driver firmware can crash, and sometimes, this can leave your
> > system in a state which makes the device or subsystem completely
> > useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
> > of scraping some magical words from the kernel log, which is driver
> > specific, is much easier. So instead this series provides a helper which
> > lets drivers annotate this and shows how to use this on networking
> > drivers.
> > 
> If the driver is able to detect that the device firmware has come back
> alive, through user intervention or whatever, should there be a way to
> "untaint" the kernel?  Or would you expect it to remain tainted?

Hi Shannon

In general, you don't want to be able to untained. Say a non-GPL
licenced module is loaded, which taints the kernel. It might then try
to untaint the kernel to hide its.

As for firmware, how much damage can the firmware do as it crashed? If
it is a DMA master, it could of splattered stuff through
memory. Restarting the firmware is not going to reverse the damage it
has done.

    Andrew

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 00/15] net: taint when the device driver firmware crashes
  2020-05-10  1:58   ` Andrew Lunn
@ 2020-05-10  2:15     ` Shannon Nelson
  2020-05-11 14:13       ` Luis Chamberlain
  0 siblings, 1 reply; 33+ messages in thread
From: Shannon Nelson @ 2020-05-10  2:15 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Luis Chamberlain, jeyu, akpm, arnd, rostedt, mingo, aquini, cai,
	dyoung, bhe, peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel

On 5/9/20 6:58 PM, Andrew Lunn wrote:
> On Sat, May 09, 2020 at 06:01:51PM -0700, Shannon Nelson wrote:
>> On 5/8/20 9:35 PM, Luis Chamberlain wrote:
>>> Device driver firmware can crash, and sometimes, this can leave your
>>> system in a state which makes the device or subsystem completely
>>> useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
>>> of scraping some magical words from the kernel log, which is driver
>>> specific, is much easier. So instead this series provides a helper which
>>> lets drivers annotate this and shows how to use this on networking
>>> drivers.
>>>
>> If the driver is able to detect that the device firmware has come back
>> alive, through user intervention or whatever, should there be a way to
>> "untaint" the kernel?  Or would you expect it to remain tainted?
> Hi Shannon
>
> In general, you don't want to be able to untained. Say a non-GPL
> licenced module is loaded, which taints the kernel. It might then try
> to untaint the kernel to hide its.

Yeah, obviously we don't want this to be abuseable.  I was just 
wondering about reversing this particular status if the broken device 
could get itself fixed.

>
> As for firmware, how much damage can the firmware do as it crashed? If
> it is a DMA master, it could of splattered stuff through
> memory. Restarting the firmware is not going to reverse the damage it
> has done.
>
True, and tho' the driver might get the thing restarted, it wouldn't 
necessarily know what kind of damage had ensued.

Carry on,
sln


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 01/15] taint: add module firmware crash taint support
  2020-05-09 16:46     ` Luis Chamberlain
@ 2020-05-10  2:19       ` Randy Dunlap
  0 siblings, 0 replies; 33+ messages in thread
From: Randy Dunlap @ 2020-05-10  2:19 UTC (permalink / raw)
  To: Luis Chamberlain, Rafael Aquini
  Cc: jeyu, akpm, arnd, rostedt, mingo, cai, dyoung, bhe, peterz, tglx,
	gpiccoli, pmladek, tiwai, schlad, andriy.shevchenko, keescook,
	daniel.vetter, will, mchehab+samsung, kvalo, davem, netdev,
	linux-kernel

On 5/9/20 9:46 AM, Luis Chamberlain wrote:
> On Sat, May 09, 2020 at 11:18:29AM -0400, Rafael Aquini wrote:
>> We are still missing the documentation bits for this
>> new flag, though.
> 
> Ah yeah sorry about that.
> 
>> How about having a blurb similar to:
>>
>> diff --git a/Documentation/admin-guide/tainted-kernels.rst b/Documentation/admin-guide/tainted-kernels.rst
>> index 71e9184a9079..5c6a9e2478b0 100644
>> --- a/Documentation/admin-guide/tainted-kernels.rst
>> +++ b/Documentation/admin-guide/tainted-kernels.rst
>> @@ -100,6 +100,7 @@ Bit  Log  Number  Reason that got the kernel tainted
>>   15  _/K   32768  kernel has been live patched
>>   16  _/X   65536  auxiliary taint, defined for and used by distros
>>   17  _/T  131072  kernel was built with the struct randomization plugin
>> + 18  _/Q  262144  driver firmware crash annotation
>>  ===  ===  ======  ========================================================
>>
>>  Note: The character ``_`` is representing a blank in this table to make reading
>> @@ -162,3 +163,7 @@ More detailed explanation for tainting
>>       produce extremely unusual kernel structure layouts (even performance
>>       pathological ones), which is important to know when debugging. Set at
>>       build time.
>> +
>> + 18) ``Q`` Device drivers might annotate the kernel with this taint, in cases
>> +     their firmware might have crashed leaving the driver in a crippled and
>> +     potentially useless state.
> 
> Sure, I'll modify it a bit to add the use case to help with support
> issues, ie, to help rule out firmware issues.

Please also update tools/debugging/kernel-chktaint.

> I'm starting to think that to make this even more usesul later we may
> want to add a uevent to add_taint() so that userspace can decide to look
> into this, ignore it, or report something to the user, say on their
> desktop.

thanks.
-- 
~Randy


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 00/15] net: taint when the device driver firmware crashes
  2020-05-09 18:35 ` [PATCH 00/15] net: taint when the device driver firmware crashes Jakub Kicinski
@ 2020-05-11 14:11   ` Luis Chamberlain
  0 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-11 14:11 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: Jiri Pirko, jeyu, akpm, arnd, rostedt, mingo, aquini, cai,
	dyoung, bhe, peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel

On Sat, May 09, 2020 at 11:35:46AM -0700, Jakub Kicinski wrote:
> On Sat,  9 May 2020 04:35:37 +0000 Luis Chamberlain wrote:
> > Device driver firmware can crash, and sometimes, this can leave your
> > system in a state which makes the device or subsystem completely
> > useless. Detecting this by inspecting /proc/sys/kernel/tainted instead
> > of scraping some magical words from the kernel log, which is driver
> > specific, is much easier. So instead this series provides a helper which
> > lets drivers annotate this and shows how to use this on networking
> > drivers.
> > 
> > My methodology for finding when firmware crashes is to git grep for
> > "crash" and then doing some study of the code to see if this indeed
> > a place where the firmware crashes. In some places this is quite
> > obvious.
> > 
> > I'm starting off with networking first, if this gets merged later on I
> > can focus on the other drivers, but I already have some work done on
> > other subsytems.
> > 
> > Review, flames, etc are greatly appreciated.
> 
> Tainting itself may be useful, but that's just the first step. I'd much
> rather see folks start using the devlink health infrastructure. Devlink
> is netlink based, but it's _not_ networking specific (many of its
> optional features obviously are, but don't let that mislead you).
> 
> With devlink health we get (a) a standard notification on the failure; 
> (b) information/state dump in a (somewhat) structured form, which can be
> collected & shared with vendors; (c) automatic remediation (usually
> device reset of some scope).

It indeed sounds very useful!

> Now regarding the tainting - as I said it may be useful, but don't we
> have to define what constitutes a "firmware crash"?

Yes indeed, I missed clarifying this in the documentation. I'll do so
in my next respin.

> There are many
> failure modes, some perfectly recoverable (e.g. processing queue hang), 
> some mere bugs (e.g. device fails to initialize some functions). All of
> them may impact the functioning of the system. How do we choose those
> that taint? 

Its up to the maintainers of the device driver, what I was aiming for
were those firmware crashes which indeed *can* have an impact on user
experience, and can *even* potentially require a driver removal / addition
to to get things back in order again.

  Luis

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 00/15] net: taint when the device driver firmware crashes
  2020-05-10  2:15     ` Shannon Nelson
@ 2020-05-11 14:13       ` Luis Chamberlain
  0 siblings, 0 replies; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-11 14:13 UTC (permalink / raw)
  To: Shannon Nelson
  Cc: Andrew Lunn, jeyu, akpm, arnd, rostedt, mingo, aquini, cai,
	dyoung, bhe, peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel

On Sat, May 09, 2020 at 07:15:23PM -0700, Shannon Nelson wrote:
> On 5/9/20 6:58 PM, Andrew Lunn wrote:
> > On Sat, May 09, 2020 at 06:01:51PM -0700, Shannon Nelson wrote:
> > As for firmware, how much damage can the firmware do as it crashed? If
> > it is a DMA master, it could of splattered stuff through
> > memory. Restarting the firmware is not going to reverse the damage it
> > has done.
> > 
> True, and tho' the driver might get the thing restarted, it wouldn't
> necessarily know what kind of damage had ensued.

Indeed, it is those uknowns which we currently assume is just fine, but
in reality can be damaging. Today we just move on with life, but such
information is useful for analysis.

  Luis

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 00/15] net: taint when the device driver firmware crashes
  2020-05-10  1:01 ` Shannon Nelson
  2020-05-10  1:58   ` Andrew Lunn
@ 2020-05-11 19:21   ` Steven Rostedt
  1 sibling, 0 replies; 33+ messages in thread
From: Steven Rostedt @ 2020-05-11 19:21 UTC (permalink / raw)
  To: Shannon Nelson
  Cc: Luis Chamberlain, jeyu, akpm, arnd, mingo, aquini, cai, dyoung,
	bhe, peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel

On Sat, 9 May 2020 18:01:51 -0700
Shannon Nelson <snelson@pensando.io> wrote:

> If the driver is able to detect that the device firmware has come back 
> alive, through user intervention or whatever, should there be a way to 
> "untaint" the kernel?  Or would you expect it to remain tainted?

The only way to untaint a kernel is a reboot. A taint just means "something
happened to this kernel since it was booted". It's used as a hint, and
that's all.

I agree with the other comments in this thread. Use devlink health or
whatever tool to look further into causes. But from what I see here, this
code is "good enough" for a taint.

-- Steve

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [EXT] [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-09 16:42     ` Luis Chamberlain
@ 2020-05-12 16:23       ` Igor Russkikh
  2020-05-12 17:34         ` Luis Chamberlain
  0 siblings, 1 reply; 33+ messages in thread
From: Igor Russkikh @ 2020-05-12 16:23 UTC (permalink / raw)
  To: Luis Chamberlain
  Cc: jeyu, akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe,
	peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel, Ariel Elior,
	GR-everest-linux-l2


>> So I think its not a good place to insert this call.
>> Its hard to find exact good place to insert it in qed.
> 
> Is there a way to check if what happened was indeed a fw crash?

Our driver has two firmwares (slowpath and fastpath).
For slowpath firmware the way to understand it crashed is to observe command
response timeout. This is in qed_mcp.c, around "The MFW failed to respond to
command" traceout.

For fastpath this is tricky, think you may leave the above place as the only
place to invoke module_firmware_crashed()

> 
>> One more thing is that AFAIU taint flag gets permanent on kernel, but
> for
>> example our device can recover itself from some FW crashes, thus it'd be
>> transparent for user.
> 
> Similar things are *supposed* to recoverable with other device, however
> this can also sometimes lead to a situation where devices are not usable
> anymore, and require a full driver unload / load.
> 
>> Whats the logical purpose of module_firmware_crashed? Does it mean fatal
>> unrecoverable error on device?
> 
> Its just to annotate on the module and kernel that this has happened.
> 
> I take it you may agree that, firmware crashing *often* is not good
> design,
> and these issues should be reported to / fixed by vendors. In cases
> where driver bugs are reported it is good to see if a firmware crash has
> happened before, so that during analysis this is ruled out.

Probably, but still I see some misalignment here, in sense that taint is about
the kernel state, not about a hardware state indication.

devlink health could really be a much better candidate for such things.

Regards
  Igor

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [EXT] [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-12 16:23       ` Igor Russkikh
@ 2020-05-12 17:34         ` Luis Chamberlain
  2020-05-14 14:53           ` Igor Russkikh
  0 siblings, 1 reply; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-12 17:34 UTC (permalink / raw)
  To: Igor Russkikh
  Cc: jeyu, akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe,
	peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel, Ariel Elior,
	GR-everest-linux-l2

On Tue, May 12, 2020 at 07:23:28PM +0300, Igor Russkikh wrote:
> 
> >> So I think its not a good place to insert this call.
> >> Its hard to find exact good place to insert it in qed.
> > 
> > Is there a way to check if what happened was indeed a fw crash?
> 
> Our driver has two firmwares (slowpath and fastpath).
> For slowpath firmware the way to understand it crashed is to observe command
> response timeout. This is in qed_mcp.c, around "The MFW failed to respond to
> command" traceout.

Ok thanks.

> For fastpath this is tricky, think you may leave the above place as the only
> place to invoke module_firmware_crashed()

So do you mean like the changes below?

diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c b/drivers/net/ethernet/qlogic/qed/qed_debug.c
index f4eebaabb6d0..95cb7da2542e 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
@@ -7906,6 +7906,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void *buffer)
 		rc = qed_dbg_grc(cdev, (u8 *)buffer + offset +
 				 REGDUMP_HEADER_SIZE, &feature_size);
 		if (!rc) {
+			module_firmware_crashed();
 			*(u32 *)((u8 *)buffer + offset) =
 			    qed_calc_regdump_header(cdev, GRC_DUMP,
 						    cur_engine,
diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
index 280527cc0578..a818cf09dccf 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
@@ -566,6 +566,7 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
 		DP_NOTICE(p_hwfn,
 			  "The MFW failed to respond to command 0x%08x [param 0x%08x].\n",
 			  p_mb_params->cmd, p_mb_params->param);
+		module_firmware_crashed();
 		qed_mcp_print_cpu_info(p_hwfn, p_ptt);
 
 		spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);

> >> One more thing is that AFAIU taint flag gets permanent on kernel, but
> > for
> >> example our device can recover itself from some FW crashes, thus it'd be
> >> transparent for user.
> > 
> > Similar things are *supposed* to recoverable with other device, however
> > this can also sometimes lead to a situation where devices are not usable
> > anymore, and require a full driver unload / load.
> > 
> >> Whats the logical purpose of module_firmware_crashed? Does it mean fatal
> >> unrecoverable error on device?
> > 
> > Its just to annotate on the module and kernel that this has happened.
> > 
> > I take it you may agree that, firmware crashing *often* is not good
> > design,
> > and these issues should be reported to / fixed by vendors. In cases
> > where driver bugs are reported it is good to see if a firmware crash has
> > happened before, so that during analysis this is ruled out.
> 
> Probably, but still I see some misalignment here, in sense that taint is about
> the kernel state, not about a hardware state indication.

The kernel carries the driver though, and the driver / subsystem can
often times act strange when this happens.

> devlink health could really be a much better candidate for such things.

That sounds fantastic, please Cc me on patches! However I still believe
we should register this event in the kernel for support purposes.

  Luis

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [EXT] [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-12 17:34         ` Luis Chamberlain
@ 2020-05-14 14:53           ` Igor Russkikh
  2020-05-15 20:32             ` Luis Chamberlain
  0 siblings, 1 reply; 33+ messages in thread
From: Igor Russkikh @ 2020-05-14 14:53 UTC (permalink / raw)
  To: Luis Chamberlain
  Cc: jeyu, akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe,
	peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel, Ariel Elior,
	GR-everest-linux-l2

> 
> So do you mean like the changes below?
> 
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> index f4eebaabb6d0..95cb7da2542e 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> @@ -7906,6 +7906,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> *buffer)
>  		rc = qed_dbg_grc(cdev, (u8 *)buffer + offset +
>  				 REGDUMP_HEADER_SIZE, &feature_size);
>  		if (!rc) {
> +			module_firmware_crashed();
>  			*(u32 *)((u8 *)buffer + offset) =
>  			    qed_calc_regdump_header(cdev, GRC_DUMP,
>  						    cur_engine,

Please remove this invocation. Its not a place where FW crash is happening.


>  		DP_NOTICE(p_hwfn,
>  			  "The MFW failed to respond to command 0x%08x
> [param 0x%08x].\n",
>  			  p_mb_params->cmd, p_mb_params->param);
> +		module_firmware_crashed();
>  		qed_mcp_print_cpu_info(p_hwfn, p_ptt);

This one is perfect, thanks!

Regards
  Igor

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [EXT] [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-14 14:53           ` Igor Russkikh
@ 2020-05-15 20:32             ` Luis Chamberlain
  2020-05-15 20:37               ` Igor Russkikh
  0 siblings, 1 reply; 33+ messages in thread
From: Luis Chamberlain @ 2020-05-15 20:32 UTC (permalink / raw)
  To: Igor Russkikh
  Cc: jeyu, akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe,
	peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel, Ariel Elior,
	GR-everest-linux-l2

On Thu, May 14, 2020 at 05:53:41PM +0300, Igor Russkikh wrote:
> > 
> > So do you mean like the changes below?
> > 
> > diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > index f4eebaabb6d0..95cb7da2542e 100644
> > --- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > +++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
> > @@ -7906,6 +7906,7 @@ int qed_dbg_all_data(struct qed_dev *cdev, void
> > *buffer)
> >  		rc = qed_dbg_grc(cdev, (u8 *)buffer + offset +
> >  				 REGDUMP_HEADER_SIZE, &feature_size);
> >  		if (!rc) {
> > +			module_firmware_crashed();
> >  			*(u32 *)((u8 *)buffer + offset) =
> >  			    qed_calc_regdump_header(cdev, GRC_DUMP,
> >  						    cur_engine,
> 
> Please remove this invocation. Its not a place where FW crash is happening.

Will do!

> 
> >  		DP_NOTICE(p_hwfn,
> >  			  "The MFW failed to respond to command 0x%08x
> > [param 0x%08x].\n",
> >  			  p_mb_params->cmd, p_mb_params->param);
> > +		module_firmware_crashed();
> >  		qed_mcp_print_cpu_info(p_hwfn, p_ptt);
> 
> This one is perfect, thanks!

Can I add your Reviewed-by provided I remove the hunk above?

  Luis

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [EXT] [PATCH 09/15] qed: use new module_firmware_crashed()
  2020-05-15 20:32             ` Luis Chamberlain
@ 2020-05-15 20:37               ` Igor Russkikh
  0 siblings, 0 replies; 33+ messages in thread
From: Igor Russkikh @ 2020-05-15 20:37 UTC (permalink / raw)
  To: Luis Chamberlain
  Cc: jeyu, akpm, arnd, rostedt, mingo, aquini, cai, dyoung, bhe,
	peterz, tglx, gpiccoli, pmladek, tiwai, schlad,
	andriy.shevchenko, keescook, daniel.vetter, will,
	mchehab+samsung, kvalo, davem, netdev, linux-kernel, Ariel Elior,
	GR-everest-linux-l2


> >
> > This one is perfect, thanks!
> 
> Can I add your Reviewed-by provided I remove the hunk above?
> 
>   Luis

Sure, I'm OK.

Regards,
  Igor
 

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2020-05-15 20:39 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-09  4:35 [PATCH 00/15] net: taint when the device driver firmware crashes Luis Chamberlain
2020-05-09  4:35 ` [PATCH 01/15] taint: add module firmware crash taint support Luis Chamberlain
2020-05-09 15:18   ` Rafael Aquini
2020-05-09 16:46     ` Luis Chamberlain
2020-05-10  2:19       ` Randy Dunlap
2020-05-09  4:35 ` [PATCH 02/15] ethernet/839: use new module_firmware_crashed() Luis Chamberlain
2020-05-09  4:35 ` [PATCH 03/15] bnx2x: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 04/15] bnxt: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 05/15] bna: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 06/15] liquidio: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 07/15] cxgb4: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 08/15] ehea: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 09/15] qed: " Luis Chamberlain
2020-05-09  6:32   ` [EXT] " Igor Russkikh
2020-05-09 16:42     ` Luis Chamberlain
2020-05-12 16:23       ` Igor Russkikh
2020-05-12 17:34         ` Luis Chamberlain
2020-05-14 14:53           ` Igor Russkikh
2020-05-15 20:32             ` Luis Chamberlain
2020-05-15 20:37               ` Igor Russkikh
2020-05-09  4:35 ` [PATCH 10/15] soc: qcom: ipa: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 11/15] wimax/i2400m: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 12/15] ath10k: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 13/15] ath6kl: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 14/15] brcm80211: " Luis Chamberlain
2020-05-09  4:35 ` [PATCH 15/15] mwl8k: " Luis Chamberlain
2020-05-09 18:35 ` [PATCH 00/15] net: taint when the device driver firmware crashes Jakub Kicinski
2020-05-11 14:11   ` Luis Chamberlain
2020-05-10  1:01 ` Shannon Nelson
2020-05-10  1:58   ` Andrew Lunn
2020-05-10  2:15     ` Shannon Nelson
2020-05-11 14:13       ` Luis Chamberlain
2020-05-11 19:21   ` Steven Rostedt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).