diff --git a/dp/wifi3.0/dp_rx_defrag.c b/dp/wifi3.0/dp_rx_defrag.c index b6e2172a38..b42bd167a4 100644 --- a/dp/wifi3.0/dp_rx_defrag.c +++ b/dp/wifi3.0/dp_rx_defrag.c @@ -84,6 +84,7 @@ static void dp_rx_clear_saved_desc_info(struct dp_peer *peer, unsigned tid) qdf_mem_free(peer->rx_tid[tid].dst_ring_desc); peer->rx_tid[tid].dst_ring_desc = NULL; + peer->rx_tid[tid].head_frag_desc = NULL; } static void dp_rx_return_head_frag_desc(struct dp_peer *peer, @@ -1334,29 +1335,22 @@ void dp_rx_defrag_cleanup(struct dp_peer *peer, unsigned tid) struct dp_rx_reorder_array_elem *rx_reorder_array_elem = peer->rx_tid[tid].array; - if (!rx_reorder_array_elem) { - /* - * if this condition is hit then somebody - * must have reset this pointer to NULL. - * array pointer usually points to base variable - * of TID queue structure: "struct dp_rx_tid" - */ + if (rx_reorder_array_elem) { + /* Free up nbufs */ + dp_rx_defrag_frames_free(rx_reorder_array_elem->head); + rx_reorder_array_elem->head = NULL; + rx_reorder_array_elem->tail = NULL; + } else { dp_info("Cleanup self peer %pK and TID %u at MAC address %pM", peer, tid, peer->mac_addr.raw); - return; } - /* Free up nbufs */ - dp_rx_defrag_frames_free(rx_reorder_array_elem->head); /* Free up saved ring descriptors */ dp_rx_clear_saved_desc_info(peer, tid); - rx_reorder_array_elem->head = NULL; - rx_reorder_array_elem->tail = NULL; peer->rx_tid[tid].defrag_timeout_ms = 0; peer->rx_tid[tid].curr_frag_num = 0; peer->rx_tid[tid].curr_seq_num = 0; - peer->rx_tid[tid].head_frag_desc = NULL; } /*