2020-05-05 01:28:36

by Rajkumar Manoharan

[permalink] [raw]
Subject: [PATCH] ath11k: remove stale monitor status descriptor

From: Miles Hu <[email protected]>

The driver is not handling monitor status descriptor whenever
the done bit of status descriptor is not set by hardware. This leave
a stale entry in monitor status ring and flooding warning message.
Fix that by removing the descriptor and move forward to next one
in monitor status ring.

Co-developed-by: Rajkumar Manoharan <[email protected]>
Signed-off-by: Rajkumar Manoharan <[email protected]>
Signed-off-by: Miles Hu <[email protected]>
---
drivers/net/wireless/ath/ath11k/dp_rx.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c
index 47ad3bd9e1c6..27d17b8db662 100644
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
@@ -2722,7 +2722,7 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
ath11k_warn(ab, "rx monitor status with invalid buf_id %d\n",
buf_id);
spin_unlock_bh(&rx_ring->idr_lock);
- continue;
+ goto move_next;
}

idr_remove(&rx_ring->bufs_idr, buf_id);
@@ -2741,13 +2741,16 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
tlv = (struct hal_tlv_hdr *)skb->data;
if (FIELD_GET(HAL_TLV_HDR_TAG, tlv->tl) !=
HAL_RX_STATUS_BUFFER_DONE) {
- ath11k_hal_srng_src_get_next_entry(ab, srng);
- continue;
+ ath11k_warn(ab, "mon status DONE not set %lx\n",
+ FIELD_GET(HAL_TLV_HDR_TAG,
+ tlv->tl));
+ dev_kfree_skb_any(skb);
+ goto move_next;
}

__skb_queue_tail(skb_list, skb);
}
-
+move_next:
skb = ath11k_dp_rx_alloc_mon_status_buf(ab, rx_ring,
&buf_id, GFP_ATOMIC);

--
2.7.4


2020-05-11 12:31:29

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath11k: remove stale monitor status descriptor

Rajkumar Manoharan <[email protected]> wrote:

> The driver is not handling monitor status descriptor whenever
> the done bit of status descriptor is not set by hardware. This leave
> a stale entry in monitor status ring and flooding warning message.
> Fix that by removing the descriptor and move forward to next one
> in monitor status ring.
>
> Co-developed-by: Rajkumar Manoharan <[email protected]>
> Signed-off-by: Rajkumar Manoharan <[email protected]>
> Signed-off-by: Miles Hu <[email protected]>
> Signed-off-by: Kalle Valo <[email protected]>

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

32a2be499c01 ath11k: remove stale monitor status descriptor

--
https://patchwork.kernel.org/patch/11527999/

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