summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/broadcom/brcm80211/brcmfmac
diff options
context:
space:
mode:
authorFugang Duan <fugang.duan@nxp.com>2019-04-30 11:35:08 +0800
committerFugang Duan <fugang.duan@nxp.com>2019-04-30 14:07:18 +0800
commit8335b0d983a93d7eb4ce4ea1c4f6ebdea084f4d1 (patch)
tree28f99fdc1eea1033f9b0d8f50d35db72b4f47dbb /drivers/net/wireless/broadcom/brcm80211/brcmfmac
parentf95350e51ff767c9bd0633f1b94171b3847fd515 (diff)
MLK-19341 brcmfmac: bcmsdh: add shutdown handler to avoid kernel panic on reboot
When running wlan interface up/down stress test in background then run reboot command, there have kernel panic as below message. This issue is fixed by doing cleanup in shutdown handler. Unable to handle kernel paging request at virtual address 7f0e9040 pgd = 86c20000 [7f0e9040] *pgd=86ecd811, *pte=00000000, *ppte=00000000 Internal error: Oops: 7 [#1] PREEMPT SMP ARM task: 8603c000 task.stack: 86040000 PC is at device_shutdown+0x198/0x204 LR is at _raw_spin_unlock_irq+0x28/0x54 pc : [<804ee520>] lr : [<809a70dc>] psr: 20030013 sp : 86041e60 ip : 00000000 fp : 80c5b7e4 r10: 80cb0b24 r9 : 80f7e020 r8 : 86b0b844 r7 : 80fdce84 r6 : 86b0b810 r5 : 80f34ef0 r4 : 86b0b81c r3 : 7f0e9018 r2 : ffffffff r1 : 00000002 r0 : 00000000 Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none Control: 10c53c7d Table: 86c2006a DAC: 00000051 Process systemd-shutdow (pid: 1, stack limit = 0x86040210) Stack: (0x86041e60 to 0x86042000) 1e60: 00000000 00000000 80f0f704 aef99500 fee1dead 80107c44 86040000 00000000 1e80: 7eee5fd4 8014bb74 00000000 8014bdcc 00000000 00000000 00000000 8020464c 1ea0: 87336540 00000000 00000000 00000000 861b24e0 87336548 00000024 00000002 1ec0: 00000000 00000005 0000001e 80205c34 00000000 00000000 1c4a66cc 87336540 1ee0: 00000000 86041f08 86041f80 00000000 00000000 80205d5c 86041f04 86041f08 1f00: 00000000 00000000 00000001 00000000 00000024 86041f20 00000005 7eee521c 1f20: 7eee5350 00000004 7eee5f1c 00000010 7eee5364 00000005 7eee53f4 0000000a 1f40: 76ece6fc 00000001 86005b00 00000005 fffffffe fffffffe 86d1a000 fffff000 1f60: 80107c44 87336540 87336540 00000000 7eee5318 80205df0 00000000 00000004 1f80: 00000000 00000000 00000000 7eee53f4 7eee5318 00000000 00000000 00000000 1fa0: 00000058 80107a60 00000000 00000000 fee1dead 28121969 01234567 aef99500 1fc0: 00000000 00000000 00000000 00000058 00000000 ffffffff 00000000 7eee5fd4 1fe0: 004a0e18 7eee5c44 0048afa4 76d0b5e0 60030010 fee1dead 00000000 00000000 [<804ee520>] (device_shutdown) from [<8014bb74>] (kernel_restart+0xc/0x50) [<8014bb74>] (kernel_restart) from [<8014bdcc>] (SyS_reboot+0xc8/0x1ac) [<8014bdcc>] (SyS_reboot) from [<80107a60>] (ret_fast_syscall+0x0/0x54) Code: eaffffb5 e5943040 e3530000 0afffff3 (e5933028) ---[ end trace cb8c3d96d6f26a91 ]--- Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com> Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Diffstat (limited to 'drivers/net/wireless/broadcom/brcm80211/brcmfmac')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
index 6e0a31b2b1cb..43015f2333c4 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
@@ -1243,6 +1243,14 @@ static void brcmf_ops_sdio_remove(struct sdio_func *func)
brcmf_dbg(SDIO, "Exit\n");
}
+static void brcmf_ops_sdio_shutdown(struct device *dev)
+{
+ struct sdio_func *func = container_of(dev, struct sdio_func, dev);
+
+ brcmf_ops_sdio_remove(func);
+ return;
+}
+
void brcmf_sdio_wowl_config(struct device *dev, bool enabled)
{
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
@@ -1326,6 +1334,7 @@ static struct sdio_driver brcmf_sdmmc_driver = {
#ifdef CONFIG_PM_SLEEP
.pm = &brcmf_sdio_pm_ops,
#endif /* CONFIG_PM_SLEEP */
+ .shutdown = brcmf_ops_sdio_shutdown,
},
};