diff mbox series

wifi: ath12k: Skip Rx TID cleanup for self peer

Message ID 20240905042851.2282306-1-quic_rgnanase@quicinc.com (mailing list archive)
State Accepted
Commit 1a0c640ce1cdcde3eb131a0c1e70ca1ed7cf27cb
Delegated to: Kalle Valo
Headers show
Series wifi: ath12k: Skip Rx TID cleanup for self peer | expand

Commit Message

Ramya Gnanasekar Sept. 5, 2024, 4:28 a.m. UTC
During peer create, dp setup for the peer is done where Rx TID is
updated for all the TIDs. Peer object for self peer will not go through
dp setup.

When core halts, dp cleanup is done for all the peers. While cleanup,
rx_tid::ab is accessed which causes below stack trace for self peer.

WARNING: CPU: 6 PID: 12297 at drivers/net/wireless/ath/ath12k/dp_rx.c:851
Call Trace:
__warn+0x7b/0x1a0
ath12k_dp_rx_frags_cleanup+0xd2/0xe0 [ath12k]
report_bug+0x10b/0x200
handle_bug+0x3f/0x70
exc_invalid_op+0x13/0x60
asm_exc_invalid_op+0x16/0x20
ath12k_dp_rx_frags_cleanup+0xd2/0xe0 [ath12k]
ath12k_dp_rx_frags_cleanup+0xca/0xe0 [ath12k]
ath12k_dp_rx_peer_tid_cleanup+0x39/0xa0 [ath12k]
ath12k_mac_peer_cleanup_all+0x61/0x100 [ath12k]
ath12k_core_halt+0x3b/0x100 [ath12k]
ath12k_core_reset+0x494/0x4c0 [ath12k]

sta object in peer will be updated when remote peer is created. Hence
use peer::sta to detect the self peer and skip the cleanup.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")

Signed-off-by: Ramya Gnanasekar <quic_rgnanase@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/mac.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jeff Johnson Sept. 5, 2024, 7:59 p.m. UTC | #1
On 9/4/2024 9:28 PM, Ramya Gnanasekar wrote:
> During peer create, dp setup for the peer is done where Rx TID is
> updated for all the TIDs. Peer object for self peer will not go through
> dp setup.
> 
> When core halts, dp cleanup is done for all the peers. While cleanup,
> rx_tid::ab is accessed which causes below stack trace for self peer.
> 
> WARNING: CPU: 6 PID: 12297 at drivers/net/wireless/ath/ath12k/dp_rx.c:851
> Call Trace:
> __warn+0x7b/0x1a0
> ath12k_dp_rx_frags_cleanup+0xd2/0xe0 [ath12k]
> report_bug+0x10b/0x200
> handle_bug+0x3f/0x70
> exc_invalid_op+0x13/0x60
> asm_exc_invalid_op+0x16/0x20
> ath12k_dp_rx_frags_cleanup+0xd2/0xe0 [ath12k]
> ath12k_dp_rx_frags_cleanup+0xca/0xe0 [ath12k]
> ath12k_dp_rx_peer_tid_cleanup+0x39/0xa0 [ath12k]
> ath12k_mac_peer_cleanup_all+0x61/0x100 [ath12k]
> ath12k_core_halt+0x3b/0x100 [ath12k]
> ath12k_core_reset+0x494/0x4c0 [ath12k]
> 
> sta object in peer will be updated when remote peer is created. Hence
> use peer::sta to detect the self peer and skip the cleanup.
> 
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
> 
> Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
> 

remove this blank line. Kalle can fix this in the pending branch

> Signed-off-by: Ramya Gnanasekar <quic_rgnanase@quicinc.com>

Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Kalle Valo Sept. 28, 2024, 9:25 a.m. UTC | #2
Ramya Gnanasekar <quic_rgnanase@quicinc.com> wrote:

> During peer create, dp setup for the peer is done where Rx TID is
> updated for all the TIDs. Peer object for self peer will not go through
> dp setup.
> 
> When core halts, dp cleanup is done for all the peers. While cleanup,
> rx_tid::ab is accessed which causes below stack trace for self peer.
> 
> WARNING: CPU: 6 PID: 12297 at drivers/net/wireless/ath/ath12k/dp_rx.c:851
> Call Trace:
> __warn+0x7b/0x1a0
> ath12k_dp_rx_frags_cleanup+0xd2/0xe0 [ath12k]
> report_bug+0x10b/0x200
> handle_bug+0x3f/0x70
> exc_invalid_op+0x13/0x60
> asm_exc_invalid_op+0x16/0x20
> ath12k_dp_rx_frags_cleanup+0xd2/0xe0 [ath12k]
> ath12k_dp_rx_frags_cleanup+0xca/0xe0 [ath12k]
> ath12k_dp_rx_peer_tid_cleanup+0x39/0xa0 [ath12k]
> ath12k_mac_peer_cleanup_all+0x61/0x100 [ath12k]
> ath12k_core_halt+0x3b/0x100 [ath12k]
> ath12k_core_reset+0x494/0x4c0 [ath12k]
> 
> sta object in peer will be updated when remote peer is created. Hence
> use peer::sta to detect the self peer and skip the cleanup.
> 
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
> 
> Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
> Signed-off-by: Ramya Gnanasekar <quic_rgnanase@quicinc.com>
> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>

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

1a0c640ce1cd wifi: ath12k: Skip Rx TID cleanup for self peer
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
index 8106297f0bc1..3949bef1db3c 100644
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -917,7 +917,9 @@  void ath12k_mac_peer_cleanup_all(struct ath12k *ar)
 
 	spin_lock_bh(&ab->base_lock);
 	list_for_each_entry_safe(peer, tmp, &ab->peers, list) {
-		ath12k_dp_rx_peer_tid_cleanup(ar, peer);
+		/* Skip Rx TID cleanup for self peer */
+		if (peer->sta)
+			ath12k_dp_rx_peer_tid_cleanup(ar, peer);
 		list_del(&peer->list);
 		kfree(peer);
 	}