summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/dp/txrx/ol_tx.c3
-rw-r--r--core/dp/txrx/ol_tx_desc.c2
-rw-r--r--core/dp/txrx/ol_txrx.c11
3 files changed, 11 insertions, 5 deletions
diff --git a/core/dp/txrx/ol_tx.c b/core/dp/txrx/ol_tx.c
index da265080de5e..eccc0507acc3 100644
--- a/core/dp/txrx/ol_tx.c
+++ b/core/dp/txrx/ol_tx.c
@@ -625,7 +625,8 @@ ol_tx_ll_fast(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list)
* Free the descriptor, return the
* packet to the caller.
*/
- ol_tx_desc_free(pdev, tx_desc);
+ ol_tx_desc_frame_free_nonstd(pdev,
+ tx_desc, 1);
return msdu;
}
if (msdu_info.tso_info.curr_seg) {
diff --git a/core/dp/txrx/ol_tx_desc.c b/core/dp/txrx/ol_tx_desc.c
index dbaef89c7cb8..c4e78ae6de46 100644
--- a/core/dp/txrx/ol_tx_desc.c
+++ b/core/dp/txrx/ol_tx_desc.c
@@ -171,6 +171,7 @@ struct ol_tx_desc_t *ol_tx_desc_alloc(struct ol_txrx_pdev_t *pdev,
ol_tx_desc_vdev_update(tx_desc, vdev);
ol_tx_desc_count_inc(vdev);
+ qdf_atomic_inc(&tx_desc->ref_cnt);
return tx_desc;
}
@@ -225,6 +226,7 @@ struct ol_tx_desc_t *ol_tx_desc_alloc(struct ol_txrx_pdev_t *pdev,
ol_tx_desc_sanity_checks(pdev, tx_desc);
ol_tx_desc_compute_delay(tx_desc);
ol_tx_desc_vdev_update(tx_desc, vdev);
+ qdf_atomic_inc(&tx_desc->ref_cnt);
} else {
pool->pkt_drop_no_desc++;
qdf_spin_unlock_bh(&pool->flow_pool_lock);
diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c
index 0ed97844c07e..19f4f2958d89 100644
--- a/core/dp/txrx/ol_txrx.c
+++ b/core/dp/txrx/ol_txrx.c
@@ -1633,10 +1633,8 @@ void ol_txrx_pdev_detach(ol_txrx_pdev_handle pdev, int force)
ol_txrx_peer_find_hash_erase(pdev);
}
- htt_deregister_rx_pkt_dump_callback(pdev->htt_pdev);
- ol_tx_deregister_flow_control(pdev);
- /* Stop the communication between HTT and target at first */
- htt_detach_target(pdev->htt_pdev);
+ /* to get flow pool status before freeing descs */
+ ol_tx_dump_flow_pool_info();
for (i = 0; i < pdev->tx_desc.pool_size; i++) {
void *htt_tx_desc;
@@ -1660,6 +1658,11 @@ void ol_txrx_pdev_detach(ol_txrx_pdev_handle pdev, int force)
htt_tx_desc_free(pdev->htt_pdev, htt_tx_desc);
}
+ htt_deregister_rx_pkt_dump_callback(pdev->htt_pdev);
+ ol_tx_deregister_flow_control(pdev);
+ /* Stop the communication between HTT and target at first */
+ htt_detach_target(pdev->htt_pdev);
+
qdf_mem_multi_pages_free(pdev->osdev,
&pdev->tx_desc.desc_pages, 0, true);
pdev->tx_desc.freelist = NULL;