diff options
| -rw-r--r-- | core/dp/txrx/ol_rx_defrag.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/core/dp/txrx/ol_rx_defrag.c b/core/dp/txrx/ol_rx_defrag.c index 9fee005f462e..0e1a38420074 100644 --- a/core/dp/txrx/ol_rx_defrag.c +++ b/core/dp/txrx/ol_rx_defrag.c @@ -332,6 +332,7 @@ ol_rx_frag_indication_handler(ol_txrx_pdev_handle pdev, void *rx_mpdu_desc; uint8_t pktlog_bit; uint32_t msdu_count = 0; + int ret; htt_pdev = pdev->htt_pdev; peer = ol_txrx_peer_find_by_id(pdev, peer_id); @@ -350,9 +351,14 @@ ol_rx_frag_indication_handler(ol_txrx_pdev_handle pdev, } pktlog_bit = (htt_rx_amsdu_rx_in_order_get_pktlog(rx_frag_ind_msg) == 0x01); + ret = htt_rx_frag_pop(htt_pdev, rx_frag_ind_msg, &head_msdu, + &tail_msdu, &msdu_count); + /* Return if msdu pop fails from rx hash table, as recovery + * is triggered and we exit gracefully. + */ + if (!ret) + return; if (peer) { - htt_rx_frag_pop(htt_pdev, rx_frag_ind_msg, &head_msdu, - &tail_msdu, &msdu_count); qdf_assert(head_msdu == tail_msdu); if (ol_cfg_is_full_reorder_offload(pdev->ctrl_pdev)) { rx_mpdu_desc = @@ -369,8 +375,6 @@ ol_rx_frag_indication_handler(ol_txrx_pdev_handle pdev, ol_rx_reorder_store_frag(pdev, peer, tid, seq_num, head_msdu); } else { /* invalid frame - discard it */ - htt_rx_frag_pop(htt_pdev, rx_frag_ind_msg, &head_msdu, - &tail_msdu, &msdu_count); if (ol_cfg_is_full_reorder_offload(pdev->ctrl_pdev)) htt_rx_msdu_desc_retrieve(htt_pdev, head_msdu); else |
