diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index b3cb408f1ef0..a277ddf1016a 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -2710,13 +2710,6 @@ done: vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf); peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf); - if (qdf_unlikely(hal_rx_attn_msdu_len_err_get(rx_tlv_hdr))) { - DP_STATS_INC(soc, rx.err.msdu_len_err, 1); - qdf_nbuf_free(nbuf); - nbuf = next; - continue; - } - if (dp_rx_is_list_ready(deliver_list_head, vdev, peer, peer_id, vdev_id)) { dp_rx_deliver_to_stack(soc, vdev, peer, @@ -2790,17 +2783,25 @@ done: * Check if DMA completed -- msdu_done is the last bit * to be written */ - if (qdf_unlikely(!qdf_nbuf_is_rx_chfrag_cont(nbuf) && - !hal_rx_attn_msdu_done_get(rx_tlv_hdr))) { - dp_err("MSDU DONE failure"); - DP_STATS_INC(soc, rx.err.msdu_done_fail, 1); - hal_rx_dump_pkt_tlvs(hal_soc, rx_tlv_hdr, - QDF_TRACE_LEVEL_INFO); - tid_stats->fail_cnt[MSDU_DONE_FAILURE]++; - qdf_nbuf_free(nbuf); - qdf_assert(0); - nbuf = next; - continue; + if (qdf_likely(!qdf_nbuf_is_rx_chfrag_cont(nbuf))) { + if (qdf_unlikely(!hal_rx_attn_msdu_done_get( + rx_tlv_hdr))) { + dp_err_rl("MSDU DONE failure"); + DP_STATS_INC(soc, rx.err.msdu_done_fail, 1); + hal_rx_dump_pkt_tlvs(hal_soc, rx_tlv_hdr, + QDF_TRACE_LEVEL_INFO); + tid_stats->fail_cnt[MSDU_DONE_FAILURE]++; + qdf_assert(0); + qdf_nbuf_free(nbuf); + nbuf = next; + continue; + } else if (qdf_unlikely(hal_rx_attn_msdu_len_err_get( + rx_tlv_hdr))) { + DP_STATS_INC(soc, rx.err.msdu_len_err, 1); + qdf_nbuf_free(nbuf); + nbuf = next; + continue; + } } DP_HIST_PACKET_COUNT_INC(vdev->pdev->pdev_id);