Subject: [PATCH] ath11k: fix kernel panic during unload/load ath11k modules

Call netif_napi_del() from ath11k_ahb_free_ext_irq() to fix
the following kernel panic when unload/load ath11k modules
for few iterations.

[ 971.201365] Unable to handle kernel paging request at virtual address 6d97a208
[ 971.204227] pgd = 594c2919
[ 971.211478] [6d97a208] *pgd=00000000
[ 971.214120] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
[ 971.412024] CPU: 2 PID: 4435 Comm: insmod Not tainted 5.4.89 #0
[ 971.434256] Hardware name: Generic DT based system
[ 971.440165] PC is at napi_by_id+0x10/0x40
[ 971.445019] LR is at netif_napi_add+0x160/0x1dc

[ 971.743127] (napi_by_id) from [<807d89a0>] (netif_napi_add+0x160/0x1dc)
[ 971.751295] (netif_napi_add) from [<7f1209ac>] (ath11k_ahb_config_irq+0xf8/0x414 [ath11k_ahb])
[ 971.759164] (ath11k_ahb_config_irq [ath11k_ahb]) from [<7f12135c>] (ath11k_ahb_probe+0x40c/0x51c [ath11k_ahb])
[ 971.768567] (ath11k_ahb_probe [ath11k_ahb]) from [<80666864>] (platform_drv_probe+0x48/0x94)
[ 971.779670] (platform_drv_probe) from [<80664718>] (really_probe+0x1c8/0x450)
[ 971.789389] (really_probe) from [<80664cc4>] (driver_probe_device+0x15c/0x1b8)
[ 971.797547] (driver_probe_device) from [<80664f60>] (device_driver_attach+0x44/0x60)
[ 971.805795] (device_driver_attach) from [<806650a0>] (__driver_attach+0x124/0x140)
[ 971.814822] (__driver_attach) from [<80662adc>] (bus_for_each_dev+0x58/0xa4)
[ 971.823328] (bus_for_each_dev) from [<80663a2c>] (bus_add_driver+0xf0/0x1e8)
[ 971.831662] (bus_add_driver) from [<806658a4>] (driver_register+0xa8/0xf0)
[ 971.839822] (driver_register) from [<8030269c>] (do_one_initcall+0x78/0x1ac)
[ 971.847638] (do_one_initcall) from [<80392524>] (do_init_module+0x54/0x200)
[ 971.855968] (do_init_module) from [<803945b0>] (load_module+0x1e30/0x1ffc)
[ 971.864126] (load_module) from [<803948b0>] (sys_init_module+0x134/0x17c)
[ 971.871852] (sys_init_module) from [<80301000>] (ret_fast_syscall+0x0/0x50)

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.6.0.1-00760-QCAHKSWPL_SILICONZ-1

Signed-off-by: Venkateswara Naralasetty <[email protected]>
---
drivers/net/wireless/ath/ath11k/ahb.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c
index 3fcec42..f407d4a 100644
--- a/drivers/net/wireless/ath/ath11k/ahb.c
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
@@ -391,6 +391,8 @@ static void ath11k_ahb_free_ext_irq(struct ath11k_base *ab)

for (j = 0; j < irq_grp->num_irq; j++)
free_irq(ab->irq_num[irq_grp->irqs[j]], irq_grp);
+
+ netif_napi_del(&irq_grp->napi);
}
}

--
2.7.4


2022-02-01 20:41:45

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath11k: fix kernel panic during unload/load ath11k modules

Venkateswara Naralasetty <[email protected]> wrote:

> Call netif_napi_del() from ath11k_ahb_free_ext_irq() to fix
> the following kernel panic when unload/load ath11k modules
> for few iterations.
>
> [ 971.201365] Unable to handle kernel paging request at virtual address 6d97a208
> [ 971.204227] pgd = 594c2919
> [ 971.211478] [6d97a208] *pgd=00000000
> [ 971.214120] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> [ 971.412024] CPU: 2 PID: 4435 Comm: insmod Not tainted 5.4.89 #0
> [ 971.434256] Hardware name: Generic DT based system
> [ 971.440165] PC is at napi_by_id+0x10/0x40
> [ 971.445019] LR is at netif_napi_add+0x160/0x1dc
>
> [ 971.743127] (napi_by_id) from [<807d89a0>] (netif_napi_add+0x160/0x1dc)
> [ 971.751295] (netif_napi_add) from [<7f1209ac>] (ath11k_ahb_config_irq+0xf8/0x414 [ath11k_ahb])
> [ 971.759164] (ath11k_ahb_config_irq [ath11k_ahb]) from [<7f12135c>] (ath11k_ahb_probe+0x40c/0x51c [ath11k_ahb])
> [ 971.768567] (ath11k_ahb_probe [ath11k_ahb]) from [<80666864>] (platform_drv_probe+0x48/0x94)
> [ 971.779670] (platform_drv_probe) from [<80664718>] (really_probe+0x1c8/0x450)
> [ 971.789389] (really_probe) from [<80664cc4>] (driver_probe_device+0x15c/0x1b8)
> [ 971.797547] (driver_probe_device) from [<80664f60>] (device_driver_attach+0x44/0x60)
> [ 971.805795] (device_driver_attach) from [<806650a0>] (__driver_attach+0x124/0x140)
> [ 971.814822] (__driver_attach) from [<80662adc>] (bus_for_each_dev+0x58/0xa4)
> [ 971.823328] (bus_for_each_dev) from [<80663a2c>] (bus_add_driver+0xf0/0x1e8)
> [ 971.831662] (bus_add_driver) from [<806658a4>] (driver_register+0xa8/0xf0)
> [ 971.839822] (driver_register) from [<8030269c>] (do_one_initcall+0x78/0x1ac)
> [ 971.847638] (do_one_initcall) from [<80392524>] (do_init_module+0x54/0x200)
> [ 971.855968] (do_init_module) from [<803945b0>] (load_module+0x1e30/0x1ffc)
> [ 971.864126] (load_module) from [<803948b0>] (sys_init_module+0x134/0x17c)
> [ 971.871852] (sys_init_module) from [<80301000>] (ret_fast_syscall+0x0/0x50)
>
> Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.6.0.1-00760-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Venkateswara Naralasetty <[email protected]>
> Signed-off-by: Kalle Valo <[email protected]>

Patch applied to ath-next branch of ath.git, thanks.

22b59cb965f7 ath11k: fix kernel panic during unload/load ath11k modules

--
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/

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