Message ID | 1588642063-6950-1-git-send-email-rmanohar@codeaurora.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 32a2be499c01ee523b28018d451b39ded4297b11 |
Delegated to: | Kalle Valo |
Headers | show |
Series | ath11k: remove stale monitor status descriptor | expand |
Rajkumar Manoharan <rmanohar@codeaurora.org> 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 <rmanohar@codeaurora.org> > Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org> > Signed-off-by: Miles Hu <milehu@codeaurora.org> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Patch applied to ath-next branch of ath.git, thanks. 32a2be499c01 ath11k: remove stale monitor status descriptor
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);