diff mbox series

[1/2] brcmfmac: Fix warning when hitting FW crash with flow control feature

Message ID 20200928054922.44580-2-wright.feng@cypress.com
State New
Headers show
Series [1/2] brcmfmac: Fix warning when hitting FW crash with flow control feature | expand

Commit Message

Wright Feng Sept. 28, 2020, 5:49 a.m. UTC
Brcmfmac got warning message when hitting FW crash in TX throughput test
with fcmode=2. It's caused by FMAC flushed TXQ in brcmf_sdio_bus_stop
but without doing hanger slot cleanup. Therefore, we move
brcmf_remove_interface before brcmf_bus_stop to make sure the hanger
slot is clean when flushing TXQ.

[ 1891.512234] WARNING: CPU: 1 PID: 2765 at drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c:49 brcmu_pkt_buf_free_skb+0x21/0x30 [brcmutil]
[ 1891.512234] Modules linked in: brcmfmac(OE-) brcmutil(OE)
cfg80211(OE) compat(OE) rfkill mmc_block(OE) sdhci_pci(OE) sdhci(OE)
mmc_core(OE) ip6table_filter ip6_tables ebtable_nat ebtables
dns_resolver fscache e1000e ppdev iTCO_wdt iTCO_vendor_support tpm_tis
tpm_tis_core tpm mei_me mei pcspkr lpc_ich i2c_i801 mfd_core ptp
pps_core parport_pc parport wmi tcp_bic uinput i915 iosf_mbi
i2c_algo_bit drm_kms_helper drm i2c_core video [last unloaded: brcmfmac]
[ 1891.512247] CPU: 1 PID: 2765 Comm: rmmod Tainted: G        W  OE
4.12.0 #1
[ 1891.512247] Hardware name:                  /DH77EB, BIOS
EBH7710H.86A.0100.2013.0312.1351 03/12/2013
[ 1891.512248] task: ffff880118f08000 task.stack: ffffc90001180000
[ 1891.512249] RIP: 0010:brcmu_pkt_buf_free_skb+0x21/0x30 [brcmutil]
[ 1891.512249] RSP: 0018:ffffc90001183cc0 EFLAGS: 00010086
[ 1891.512250] RAX: 0000000000000000 RBX: 0000000000000000 RCX:
0000000000000006
[ 1891.512251] RDX: 0000000000000000 RSI: 0000000000000086 RDI:
ffff880118e3ab00
[ 1891.512251] RBP: ffffc90001183cc0 R08: 0000000000000000 R09:
000000000000a050
[ 1891.512252] R10: 0000000000000001 R11: 0000000000aaaaaa R12:
00000000000000bc
[ 1891.512253] R13: ffff880118b40c78 R14: 0000000000000002 R15:
ffff880118e3ab00
[ 1891.512253] FS:  00007f2a49760740(0000) GS:ffff88011f280000(0000)
knlGS:0000000000000000
[ 1891.512254] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1891.512254] CR2: 00000000012994a8 CR3: 000000011a3c4000 CR4:
00000000001406e0
[ 1891.512255] Call Trace:
[ 1891.512259]  brcmf_fws_cleanup+0x1ea/0x240 [brcmfmac]
[ 1891.512264]  brcmf_fws_detach+0x42/0x60 [brcmfmac]
[ 1891.512268]  brcmf_proto_bcdc_detach+0x26/0x40 [brcmfmac]
[ 1891.512273]  brcmf_proto_detach+0x57/0x70 [brcmfmac]
[ 1891.512277]  brcmf_detach+0x89/0x100 [brcmfmac]
[ 1891.512282]  brcmf_sdio_remove+0x76/0x180 [brcmfmac]
[ 1891.512286]  brcmf_sdiod_remove+0x25/0xb0 [brcmfmac]
[ 1891.512291]  brcmf_ops_sdio_remove+0xbd/0x120 [brcmfmac]
[ 1891.512294]  sdio_bus_remove+0x33/0x100 [mmc_core]
[ 1891.512295]  device_release_driver_internal+0x141/0x200
[ 1891.512297]  driver_detach+0x38/0x70
[ 1891.512298]  bus_remove_driver+0x55/0xd0
[ 1891.512299]  driver_unregister+0x2c/0x50
[ 1891.512303]  sdio_unregister_driver+0x1a/0x20 [mmc_core]
[ 1891.512307]  brcmf_sdio_exit+0x2f/0x40 [brcmfmac]
[ 1891.512312]  brcmf_core_exit+0x15/0xd7 [brcmfmac]
[ 1891.512316]  __exit_compat+0x9/0x2b [brcmfmac]
[ 1891.512318]  SyS_delete_module+0x155/0x230
[ 1891.512319]  ? exit_to_usermode_loop+0x70/0x99
[ 1891.512321]  do_syscall_64+0x54/0xc0
[ 1891.512322]  entry_SYSCALL64_slow_path+0x25/0x25

Signed-off-by: Wright Feng <wright.feng@cypress.com>
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
---
 .../net/wireless/broadcom/brcm80211/brcmfmac/core.c   | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

Comments

Kalle Valo Oct. 1, 2020, 1:26 p.m. UTC | #1
Wright Feng <wright.feng@cypress.com> wrote:

> Brcmfmac got warning message when hitting FW crash in TX throughput test
> with fcmode=2. It's caused by FMAC flushed TXQ in brcmf_sdio_bus_stop
> but without doing hanger slot cleanup. Therefore, we move
> brcmf_remove_interface before brcmf_bus_stop to make sure the hanger
> slot is clean when flushing TXQ.
> 
> [ 1891.512234] WARNING: CPU: 1 PID: 2765 at drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c:49 brcmu_pkt_buf_free_skb+0x21/0x30 [brcmutil]
> [ 1891.512234] Modules linked in: brcmfmac(OE-) brcmutil(OE)
> cfg80211(OE) compat(OE) rfkill mmc_block(OE) sdhci_pci(OE) sdhci(OE)
> mmc_core(OE) ip6table_filter ip6_tables ebtable_nat ebtables
> dns_resolver fscache e1000e ppdev iTCO_wdt iTCO_vendor_support tpm_tis
> tpm_tis_core tpm mei_me mei pcspkr lpc_ich i2c_i801 mfd_core ptp
> pps_core parport_pc parport wmi tcp_bic uinput i915 iosf_mbi
> i2c_algo_bit drm_kms_helper drm i2c_core video [last unloaded: brcmfmac]
> [ 1891.512247] CPU: 1 PID: 2765 Comm: rmmod Tainted: G        W  OE
> 4.12.0 #1
> [ 1891.512247] Hardware name:                  /DH77EB, BIOS
> EBH7710H.86A.0100.2013.0312.1351 03/12/2013
> [ 1891.512248] task: ffff880118f08000 task.stack: ffffc90001180000
> [ 1891.512249] RIP: 0010:brcmu_pkt_buf_free_skb+0x21/0x30 [brcmutil]
> [ 1891.512249] RSP: 0018:ffffc90001183cc0 EFLAGS: 00010086
> [ 1891.512250] RAX: 0000000000000000 RBX: 0000000000000000 RCX:
> 0000000000000006
> [ 1891.512251] RDX: 0000000000000000 RSI: 0000000000000086 RDI:
> ffff880118e3ab00
> [ 1891.512251] RBP: ffffc90001183cc0 R08: 0000000000000000 R09:
> 000000000000a050
> [ 1891.512252] R10: 0000000000000001 R11: 0000000000aaaaaa R12:
> 00000000000000bc
> [ 1891.512253] R13: ffff880118b40c78 R14: 0000000000000002 R15:
> ffff880118e3ab00
> [ 1891.512253] FS:  00007f2a49760740(0000) GS:ffff88011f280000(0000)
> knlGS:0000000000000000
> [ 1891.512254] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 1891.512254] CR2: 00000000012994a8 CR3: 000000011a3c4000 CR4:
> 00000000001406e0
> [ 1891.512255] Call Trace:
> [ 1891.512259]  brcmf_fws_cleanup+0x1ea/0x240 [brcmfmac]
> [ 1891.512264]  brcmf_fws_detach+0x42/0x60 [brcmfmac]
> [ 1891.512268]  brcmf_proto_bcdc_detach+0x26/0x40 [brcmfmac]
> [ 1891.512273]  brcmf_proto_detach+0x57/0x70 [brcmfmac]
> [ 1891.512277]  brcmf_detach+0x89/0x100 [brcmfmac]
> [ 1891.512282]  brcmf_sdio_remove+0x76/0x180 [brcmfmac]
> [ 1891.512286]  brcmf_sdiod_remove+0x25/0xb0 [brcmfmac]
> [ 1891.512291]  brcmf_ops_sdio_remove+0xbd/0x120 [brcmfmac]
> [ 1891.512294]  sdio_bus_remove+0x33/0x100 [mmc_core]
> [ 1891.512295]  device_release_driver_internal+0x141/0x200
> [ 1891.512297]  driver_detach+0x38/0x70
> [ 1891.512298]  bus_remove_driver+0x55/0xd0
> [ 1891.512299]  driver_unregister+0x2c/0x50
> [ 1891.512303]  sdio_unregister_driver+0x1a/0x20 [mmc_core]
> [ 1891.512307]  brcmf_sdio_exit+0x2f/0x40 [brcmfmac]
> [ 1891.512312]  brcmf_core_exit+0x15/0xd7 [brcmfmac]
> [ 1891.512316]  __exit_compat+0x9/0x2b [brcmfmac]
> [ 1891.512318]  SyS_delete_module+0x155/0x230
> [ 1891.512319]  ? exit_to_usermode_loop+0x70/0x99
> [ 1891.512321]  do_syscall_64+0x54/0xc0
> [ 1891.512322]  entry_SYSCALL64_slow_path+0x25/0x25
> 
> Signed-off-by: Wright Feng <wright.feng@cypress.com>
> Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>

2 patches applied to wireless-drivers-next.git, thanks.

d0151c2bad0a brcmfmac: Fix warning when hitting FW crash with flow control feature
6aa5a83a7ed8 brcmfmac: Fix warning message after dongle setup failed
diff mbox series

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index f89010a81ffb..83f812eb81d9 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -1422,6 +1422,11 @@  void brcmf_detach(struct device *dev)
 #endif
 
 	brcmf_bus_change_state(bus_if, BRCMF_BUS_DOWN);
+	/* make sure primary interface removed last */
+	for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
+		if (drvr->iflist[i])
+			brcmf_remove_interface(drvr->iflist[i], false);
+	}
 	brcmf_bus_stop(drvr->bus_if);
 
 	brcmf_fweh_detach(drvr);
@@ -1432,12 +1437,6 @@  void brcmf_detach(struct device *dev)
 		drvr->mon_if = NULL;
 	}
 
-	/* make sure primary interface removed last */
-	for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
-		if (drvr->iflist[i])
-			brcmf_del_if(drvr, drvr->iflist[i]->bsscfgidx, false);
-	}
-
 	if (drvr->config) {
 		brcmf_p2p_detach(&drvr->config->p2p);
 		brcmf_cfg80211_detach(drvr->config);