Commit 32a2be49 authored by Miles Hu's avatar Miles Hu Committed by Kalle Valo

ath11k: remove stale monitor status descriptor

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: default avatarRajkumar Manoharan <rmanohar@codeaurora.org>
Signed-off-by: default avatarRajkumar Manoharan <rmanohar@codeaurora.org>
Signed-off-by: default avatarMiles Hu <milehu@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1588642063-6950-1-git-send-email-rmanohar@codeaurora.org
parent 790709f2
...@@ -2728,7 +2728,7 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id, ...@@ -2728,7 +2728,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", ath11k_warn(ab, "rx monitor status with invalid buf_id %d\n",
buf_id); buf_id);
spin_unlock_bh(&rx_ring->idr_lock); spin_unlock_bh(&rx_ring->idr_lock);
continue; goto move_next;
} }
idr_remove(&rx_ring->bufs_idr, buf_id); idr_remove(&rx_ring->bufs_idr, buf_id);
...@@ -2747,13 +2747,16 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id, ...@@ -2747,13 +2747,16 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
tlv = (struct hal_tlv_hdr *)skb->data; tlv = (struct hal_tlv_hdr *)skb->data;
if (FIELD_GET(HAL_TLV_HDR_TAG, tlv->tl) != if (FIELD_GET(HAL_TLV_HDR_TAG, tlv->tl) !=
HAL_RX_STATUS_BUFFER_DONE) { HAL_RX_STATUS_BUFFER_DONE) {
ath11k_hal_srng_src_get_next_entry(ab, srng); ath11k_warn(ab, "mon status DONE not set %lx\n",
continue; FIELD_GET(HAL_TLV_HDR_TAG,
tlv->tl));
dev_kfree_skb_any(skb);
goto move_next;
} }
__skb_queue_tail(skb_list, skb); __skb_queue_tail(skb_list, skb);
} }
move_next:
skb = ath11k_dp_rx_alloc_mon_status_buf(ab, rx_ring, skb = ath11k_dp_rx_alloc_mon_status_buf(ab, rx_ring,
&buf_id, GFP_ATOMIC); &buf_id, GFP_ATOMIC);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment