mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-01 16:27:08 +08:00
50 lines
2.0 KiB
Diff
50 lines
2.0 KiB
Diff
From f2180ccb52b5fd0876291ad2df37e2898cac18cf Mon Sep 17 00:00:00 2001
|
|
From: Rameshkumar Sundaram <quic_ramess@quicinc.com>
|
|
Date: Wed, 16 Feb 2022 14:02:34 +0530
|
|
Subject: [PATCH] ath11k: Invalidate cached reo ring entry before accessing it
|
|
|
|
REO2SW ring descriptor is currently allocated in cacheable memory.
|
|
While reaping reo ring entries on second trial after updating head
|
|
pointer, first entry is not invalidated before accessing it.
|
|
|
|
This results in host reaping and using cached descriptor which is
|
|
already overwritten in memory by DMA device (HW).
|
|
Since the contents of descriptor(buffer id, peer info and other information
|
|
bits) are outdated host throws errors like below while parsing corresponding
|
|
MSDU's and drops them.
|
|
|
|
[347712.048904] ath11k_pci 0004:01:00.0: msdu_done bit in attention is not set
|
|
[349173.355503] ath11k_pci 0004:01:00.0: frame rx with invalid buf_id 962
|
|
|
|
Move the try_again: label above ath11k_hal_srng_access_begin()
|
|
so that first entry will be invalidated and prefetched.
|
|
|
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
|
|
|
|
Fixes: 6452f0a3d565 ("ath11k: allocate dst ring descriptors from cacheable memory")
|
|
Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com>
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
Link: https://lore.kernel.org/r/1645000354-32558-1-git-send-email-quic_ramess@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/dp_rx.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
|
index 20c9e79042613..9183d6f2e5efc 100644
|
|
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
|
@@ -2652,9 +2652,9 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id,
|
|
|
|
spin_lock_bh(&srng->lock);
|
|
|
|
+try_again:
|
|
ath11k_hal_srng_access_begin(ab, srng);
|
|
|
|
-try_again:
|
|
while (likely(desc =
|
|
(struct hal_reo_dest_ring *)ath11k_hal_srng_dst_get_next_entry(ab,
|
|
srng))) {
|
|
--
|
|
2.35.1
|
|
|