Message ID | 1649396345-349-1-git-send-email-quic_haric@quicinc.com |
---|---|
State | New |
Headers | show |
Series | ath11k: disable spectral scan during spectral deinit | expand |
<quic_haric@quicinc.com> writes: > From: Hari Chandrakanthan <quic_haric@quicinc.com> > > When ath11k modules are removed using rmmod with spectral scan enabled, > crash is observed. Different crash trace is observed for each crash. > > Send spectral scan disable WMI command to firmware before cleaning > the spectral dbring in the spectral_deinit API to avoid this crash. > > call trace from one of the crash observed: > [ 1252.880802] Unable to handle kernel NULL pointer dereference at virtual address 00000008 > [ 1252.882722] pgd = 0f42e886 > [ 1252.890955] [00000008] *pgd=00000000 > [ 1252.893478] Internal error: Oops: 5 [#1] PREEMPT SMP ARM > [ 1253.093035] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.89 #0 > [ 1253.115261] Hardware name: Generic DT based system > [ 1253.121149] PC is at ath11k_spectral_process_data+0x434/0x574 [ath11k] > [ 1253.125940] LR is at 0x88e31017 > [ 1253.132448] pc : [<7f9387b8>] lr : [<88e31017>] psr: a0000193 > [ 1253.135488] sp : 80d01bc8 ip : 00000001 fp : 970e0000 > [ 1253.141737] r10: 88e31000 r9 : 970ec000 r8 : 00000080 > [ 1253.146946] r7 : 94734040 r6 : a0000113 r5 : 00000057 r4 : 00000000 > [ 1253.152159] r3 : e18cb694 r2 : 00000217 r1 : 1df1f000 r0 : 00000001 > [ 1253.158755] Flags: NzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user > [ 1253.165266] Control: 10c0383d Table: 5e71006a DAC: 00000055 > [ 1253.172472] Process swapper/0 (pid: 0, stack limit = 0x60870141) > [ 1253.458055] [<7f9387b8>] (ath11k_spectral_process_data [ath11k]) from [<7f917fdc>] (ath11k_dbring_buffer_release_event+0x214/0x2e4 [ath11k]) > [ 1253.466139] [<7f917fdc>] (ath11k_dbring_buffer_release_event [ath11k]) from [<7f8ea3c4>] (ath11k_wmi_tlv_op_rx+0x1840/0x29cc [ath11k]) > [ 1253.478807] [<7f8ea3c4>] (ath11k_wmi_tlv_op_rx [ath11k]) from [<7f8fe868>] (ath11k_htc_rx_completion_handler+0x180/0x4e0 [ath11k]) > [ 1253.490699] [<7f8fe868>] (ath11k_htc_rx_completion_handler [ath11k]) from [<7f91308c>] (ath11k_ce_per_engine_service+0x2c4/0x3b4 [ath11k]) > [ 1253.502386] [<7f91308c>] (ath11k_ce_per_engine_service [ath11k]) from [<7f9a4198>] (ath11k_pci_ce_tasklet+0x28/0x80 [ath11k_pci]) > [ 1253.514811] [<7f9a4198>] (ath11k_pci_ce_tasklet [ath11k_pci]) from [<8032227c>] (tasklet_action_common.constprop.2+0x64/0xe8) > [ 1253.526476] [<8032227c>] (tasklet_action_common.constprop.2) from [<803021e8>] (__do_softirq+0x130/0x2d0) > [ 1253.537756] [<803021e8>] (__do_softirq) from [<80322610>] (irq_exit+0xcc/0xe8) > [ 1253.547304] [<80322610>] (irq_exit) from [<8036a4a4>] (__handle_domain_irq+0x60/0xb4) > [ 1253.554428] [<8036a4a4>] (__handle_domain_irq) from [<805eb348>] (gic_handle_irq+0x4c/0x90) > [ 1253.562321] [<805eb348>] (gic_handle_irq) from [<80301a78>] (__irq_svc+0x58/0x8c) > > Tested on : WLAN.HK.2.6.0.1-00851-QCAHKSWPL_SILICONZ-1 Tested-on tag is not in correct format, but I can fix that.
Hi Kalle, Tested-on: QCN6122 hw1.0 AHB WLAN.HK.2.6.0.1-00851-QCAHKSWPL_SILICONZ-1 Thanks, Hari -----Original Message----- From: Kalle Valo <kvalo@kernel.org> Sent: Wednesday, April 20, 2022 9:39 PM To: Hari Chandrakanthan (QUIC) <quic_haric@quicinc.com> Cc: ath11k@lists.infradead.org; linux-wireless@vger.kernel.org Subject: Re: [PATCH] ath11k: disable spectral scan during spectral deinit Kalle Valo <kvalo@kernel.org> writes: > <quic_haric@quicinc.com> writes: > >> From: Hari Chandrakanthan <quic_haric@quicinc.com> >> >> When ath11k modules are removed using rmmod with spectral scan >> enabled, crash is observed. Different crash trace is observed for each crash. >> >> Send spectral scan disable WMI command to firmware before cleaning >> the spectral dbring in the spectral_deinit API to avoid this crash. >> >> call trace from one of the crash observed: >> [ 1252.880802] Unable to handle kernel NULL pointer dereference at >> virtual address 00000008 [ 1252.882722] pgd = 0f42e886 [ 1252.890955] >> [00000008] *pgd=00000000 [ 1252.893478] Internal error: Oops: 5 [#1] >> PREEMPT SMP ARM [ 1253.093035] CPU: 0 PID: 0 Comm: swapper/0 Not >> tainted 5.4.89 #0 [ 1253.115261] Hardware name: Generic DT based >> system [ 1253.121149] PC is at >> ath11k_spectral_process_data+0x434/0x574 [ath11k] [ 1253.125940] LR >> is at 0x88e31017 >> [ 1253.132448] pc : [<7f9387b8>] lr : [<88e31017>] psr: a0000193 >> [ 1253.135488] sp : 80d01bc8 ip : 00000001 fp : 970e0000 [ >> 1253.141737] r10: 88e31000 r9 : 970ec000 r8 : 00000080 [ >> 1253.146946] r7 : 94734040 r6 : a0000113 r5 : 00000057 r4 : >> 00000000 [ 1253.152159] r3 : e18cb694 r2 : 00000217 r1 : 1df1f000 >> r0 : 00000001 [ 1253.158755] Flags: NzCv IRQs off FIQs on Mode >> SVC_32 ISA ARM Segment user [ 1253.165266] Control: 10c0383d >> Table: 5e71006a DAC: 00000055 [ 1253.172472] Process swapper/0 (pid: >> 0, stack limit = 0x60870141) [ 1253.458055] [<7f9387b8>] >> (ath11k_spectral_process_data [ath11k]) from [<7f917fdc>] >> (ath11k_dbring_buffer_release_event+0x214/0x2e4 >> [ath11k]) >> [ 1253.466139] [<7f917fdc>] (ath11k_dbring_buffer_release_event >> [ath11k]) from [<7f8ea3c4>] (ath11k_wmi_tlv_op_rx+0x1840/0x29cc >> [ath11k]) >> [ 1253.478807] [<7f8ea3c4>] (ath11k_wmi_tlv_op_rx [ath11k]) from >> [<7f8fe868>] (ath11k_htc_rx_completion_handler+0x180/0x4e0 [ath11k]) >> [ 1253.490699] [<7f8fe868>] (ath11k_htc_rx_completion_handler >> [ath11k]) from [<7f91308c>] >> (ath11k_ce_per_engine_service+0x2c4/0x3b4 [ath11k]) [ 1253.502386] >> [<7f91308c>] (ath11k_ce_per_engine_service [ath11k]) from >> [<7f9a4198>] (ath11k_pci_ce_tasklet+0x28/0x80 [ath11k_pci]) [ >> 1253.514811] [<7f9a4198>] (ath11k_pci_ce_tasklet [ath11k_pci]) from >> [<8032227c>] (tasklet_action_common.constprop.2+0x64/0xe8) >> [ 1253.526476] [<8032227c>] (tasklet_action_common.constprop.2) from >> [<803021e8>] (__do_softirq+0x130/0x2d0) [ 1253.537756] [<803021e8>] >> (__do_softirq) from [<80322610>] (irq_exit+0xcc/0xe8) [ 1253.547304] >> [<80322610>] (irq_exit) from [<8036a4a4>] >> (__handle_domain_irq+0x60/0xb4) >> [ 1253.554428] [<8036a4a4>] (__handle_domain_irq) from [<805eb348>] >> (gic_handle_irq+0x4c/0x90) >> [ 1253.562321] [<805eb348>] (gic_handle_irq) from [<80301a78>] >> (__irq_svc+0x58/0x8c) >> >> Tested on : WLAN.HK.2.6.0.1-00851-QCAHKSWPL_SILICONZ-1 > > Tested-on tag is not in correct format, but I can fix that. Actuall I cannot as I don't know on what hardware you tested this. So what hardware did you use? -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
"Hari Chandrakanthan (QUIC)" <quic_haric@quicinc.com> writes:
> Tested-on: QCN6122 hw1.0 AHB WLAN.HK.2.6.0.1-00851-QCAHKSWPL_SILICONZ-1
QCN6122 is not yet supported in upstream, so I guess you are testing
something else than upstream? That's not good.
<quic_haric@quicinc.com> wrote: > When ath11k modules are removed using rmmod with spectral scan enabled, > crash is observed. Different crash trace is observed for each crash. > > Send spectral scan disable WMI command to firmware before cleaning > the spectral dbring in the spectral_deinit API to avoid this crash. > > call trace from one of the crash observed: > [ 1252.880802] Unable to handle kernel NULL pointer dereference at virtual address 00000008 > [ 1252.882722] pgd = 0f42e886 > [ 1252.890955] [00000008] *pgd=00000000 > [ 1252.893478] Internal error: Oops: 5 [#1] PREEMPT SMP ARM > [ 1253.093035] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.89 #0 > [ 1253.115261] Hardware name: Generic DT based system > [ 1253.121149] PC is at ath11k_spectral_process_data+0x434/0x574 [ath11k] > [ 1253.125940] LR is at 0x88e31017 > [ 1253.132448] pc : [<7f9387b8>] lr : [<88e31017>] psr: a0000193 > [ 1253.135488] sp : 80d01bc8 ip : 00000001 fp : 970e0000 > [ 1253.141737] r10: 88e31000 r9 : 970ec000 r8 : 00000080 > [ 1253.146946] r7 : 94734040 r6 : a0000113 r5 : 00000057 r4 : 00000000 > [ 1253.152159] r3 : e18cb694 r2 : 00000217 r1 : 1df1f000 r0 : 00000001 > [ 1253.158755] Flags: NzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user > [ 1253.165266] Control: 10c0383d Table: 5e71006a DAC: 00000055 > [ 1253.172472] Process swapper/0 (pid: 0, stack limit = 0x60870141) > [ 1253.458055] [<7f9387b8>] (ath11k_spectral_process_data [ath11k]) from [<7f917fdc>] (ath11k_dbring_buffer_release_event+0x214/0x2e4 [ath11k]) > [ 1253.466139] [<7f917fdc>] (ath11k_dbring_buffer_release_event [ath11k]) from [<7f8ea3c4>] (ath11k_wmi_tlv_op_rx+0x1840/0x29cc [ath11k]) > [ 1253.478807] [<7f8ea3c4>] (ath11k_wmi_tlv_op_rx [ath11k]) from [<7f8fe868>] (ath11k_htc_rx_completion_handler+0x180/0x4e0 [ath11k]) > [ 1253.490699] [<7f8fe868>] (ath11k_htc_rx_completion_handler [ath11k]) from [<7f91308c>] (ath11k_ce_per_engine_service+0x2c4/0x3b4 [ath11k]) > [ 1253.502386] [<7f91308c>] (ath11k_ce_per_engine_service [ath11k]) from [<7f9a4198>] (ath11k_pci_ce_tasklet+0x28/0x80 [ath11k_pci]) > [ 1253.514811] [<7f9a4198>] (ath11k_pci_ce_tasklet [ath11k_pci]) from [<8032227c>] (tasklet_action_common.constprop.2+0x64/0xe8) > [ 1253.526476] [<8032227c>] (tasklet_action_common.constprop.2) from [<803021e8>] (__do_softirq+0x130/0x2d0) > [ 1253.537756] [<803021e8>] (__do_softirq) from [<80322610>] (irq_exit+0xcc/0xe8) > [ 1253.547304] [<80322610>] (irq_exit) from [<8036a4a4>] (__handle_domain_irq+0x60/0xb4) > [ 1253.554428] [<8036a4a4>] (__handle_domain_irq) from [<805eb348>] (gic_handle_irq+0x4c/0x90) > [ 1253.562321] [<805eb348>] (gic_handle_irq) from [<80301a78>] (__irq_svc+0x58/0x8c) > > Tested-on: QCN6122 hw1.0 AHB WLAN.HK.2.6.0.1-00851-QCAHKSWPL_SILICONZ-1 > > Signed-off-by: Hari Chandrakanthan <quic_haric@quicinc.com> > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Patch applied to ath-next branch of ath.git, thanks. 161c64de239c ath11k: disable spectral scan during spectral deinit
diff --git a/drivers/net/wireless/ath/ath11k/spectral.c b/drivers/net/wireless/ath/ath11k/spectral.c index 2b18871..516a7b4 100644 --- a/drivers/net/wireless/ath/ath11k/spectral.c +++ b/drivers/net/wireless/ath/ath11k/spectral.c @@ -212,7 +212,10 @@ static int ath11k_spectral_scan_config(struct ath11k *ar, return -ENODEV; arvif->spectral_enabled = (mode != ATH11K_SPECTRAL_DISABLED); + + spin_lock_bh(&ar->spectral.lock); ar->spectral.mode = mode; + spin_unlock_bh(&ar->spectral.lock); ret = ath11k_wmi_vdev_spectral_enable(ar, arvif->vdev_id, ATH11K_WMI_SPECTRAL_TRIGGER_CMD_CLEAR, @@ -843,9 +846,6 @@ static inline void ath11k_spectral_ring_free(struct ath11k *ar) { struct ath11k_spectral *sp = &ar->spectral; - if (!sp->enabled) - return; - ath11k_dbring_srng_cleanup(ar, &sp->rx_ring); ath11k_dbring_buf_cleanup(ar, &sp->rx_ring); } @@ -897,15 +897,16 @@ void ath11k_spectral_deinit(struct ath11k_base *ab) if (!sp->enabled) continue; - ath11k_spectral_debug_unregister(ar); - ath11k_spectral_ring_free(ar); + mutex_lock(&ar->conf_mutex); + ath11k_spectral_scan_config(ar, ATH11K_SPECTRAL_DISABLED); + mutex_unlock(&ar->conf_mutex); spin_lock_bh(&sp->lock); - - sp->mode = ATH11K_SPECTRAL_DISABLED; sp->enabled = false; - spin_unlock_bh(&sp->lock); + + ath11k_spectral_debug_unregister(ar); + ath11k_spectral_ring_free(ar); } }