2020-09-28 05:51:03

by Wright Feng

[permalink] [raw]
Subject: [PATCH 0/2] brcmfmac: Fix warning messages when meeting failed cases

This patch series fix warning messages in two of failed cases

Wright Feng (2):
brcmfmac: Fix warning when hitting FW crash with flow control feature
brcmfmac: Fix warning message after dongle setup failed

.../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 11 +++++------
.../net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 10 ++++++----
2 files changed, 11 insertions(+), 10 deletions(-)

--
2.25.0


2020-09-28 05:51:03

by Wright Feng

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

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 <[email protected]>
Signed-off-by: Chi-hsien Lin <[email protected]>
---
.../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)

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);
--
2.25.0

2020-09-28 05:53:37

by Wright Feng

[permalink] [raw]
Subject: [PATCH 2/2] brcmfmac: Fix warning message after dongle setup failed

Brcmfmac showed warning message in fweh.c when checking the size of event
queue which is not initialized. Therefore, we only cancel the worker and
reset event handler only when it is initialized.

[ 145.505899] brcmfmac 0000:02:00.0: brcmf_pcie_setup: Dongle setup
[ 145.929970] ------------[ cut here ]------------
[ 145.929994] WARNING: CPU: 0 PID: 288 at drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c:312
brcmf_fweh_detach+0xbc/0xd0 [brcmfmac]
...
[ 145.930029] Call Trace:
[ 145.930036] brcmf_detach+0x77/0x100 [brcmfmac]
[ 145.930043] brcmf_pcie_remove+0x79/0x130 [brcmfmac]
[ 145.930046] pci_device_remove+0x39/0xc0
[ 145.930048] device_release_driver_internal+0x141/0x200
[ 145.930049] device_release_driver+0x12/0x20
[ 145.930054] brcmf_pcie_setup+0x101/0x3c0 [brcmfmac]
[ 145.930060] brcmf_fw_request_done+0x11d/0x1f0 [brcmfmac]
[ 145.930062] ? lock_timer_base+0x7d/0xa0
[ 145.930063] ? internal_add_timer+0x1f/0xa0
[ 145.930064] ? add_timer+0x11a/0x1d0
[ 145.930066] ? __kmalloc_track_caller+0x18c/0x230
[ 145.930068] ? kstrdup_const+0x23/0x30
[ 145.930069] ? add_dr+0x46/0x80
[ 145.930070] ? devres_add+0x3f/0x50
[ 145.930072] ? usermodehelper_read_unlock+0x15/0x20
[ 145.930073] ? _request_firmware+0x288/0xa20
[ 145.930075] request_firmware_work_func+0x36/0x60
[ 145.930077] process_one_work+0x144/0x360
[ 145.930078] worker_thread+0x4d/0x3c0
[ 145.930079] kthread+0x112/0x150
[ 145.930080] ? rescuer_thread+0x340/0x340
[ 145.930081] ? kthread_park+0x60/0x60
[ 145.930083] ret_from_fork+0x25/0x30

Signed-off-by: Wright Feng <[email protected]>
Signed-off-by: Chi-hsien Lin <[email protected]>
---
.../net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
index a5cced2c89ac..921b94c4f5f9 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
@@ -304,10 +304,12 @@ void brcmf_fweh_detach(struct brcmf_pub *drvr)
{
struct brcmf_fweh_info *fweh = &drvr->fweh;

- /* cancel the worker */
- cancel_work_sync(&fweh->event_work);
- WARN_ON(!list_empty(&fweh->event_q));
- memset(fweh->evt_handler, 0, sizeof(fweh->evt_handler));
+ /* cancel the worker if initialized */
+ if (fweh->event_work.func) {
+ cancel_work_sync(&fweh->event_work);
+ WARN_ON(!list_empty(&fweh->event_q));
+ memset(fweh->evt_handler, 0, sizeof(fweh->evt_handler));
+ }
}

/**
--
2.25.0

2020-10-01 13:29:13

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 1/2] brcmfmac: Fix warning when hitting FW crash with flow control feature

Wright Feng <[email protected]> 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 <[email protected]>
> Signed-off-by: Chi-hsien Lin <[email protected]>

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

--
https://patchwork.kernel.org/patch/11802905/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches