summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/dp/txrx/ol_txrx_flow_control.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/core/dp/txrx/ol_txrx_flow_control.c b/core/dp/txrx/ol_txrx_flow_control.c
index 57ce2d369c4e..7ce33d6e558e 100644
--- a/core/dp/txrx/ol_txrx_flow_control.c
+++ b/core/dp/txrx/ol_txrx_flow_control.c
@@ -312,7 +312,17 @@ ol_tx_distribute_descs_to_deficient_pools(struct ol_tx_flow_pool_t *src_pool)
desc_move_count = ol_tx_move_desc_n(src_pool,
dst_pool, desc_move_count);
desc_count -= desc_move_count;
+
qdf_spin_lock_bh(&dst_pool->flow_pool_lock);
+ if (dst_pool->status == FLOW_POOL_ACTIVE_PAUSED) {
+ if (dst_pool->avail_desc > dst_pool->start_th) {
+ pdev->pause_cb(dst_pool->member_flow_id,
+ WLAN_WAKE_ALL_NETIF_QUEUE,
+ WLAN_DATA_FLOW_CONTROL);
+ dst_pool->status =
+ FLOW_POOL_ACTIVE_UNPAUSED;
+ }
+ }
}
qdf_spin_unlock_bh(&dst_pool->flow_pool_lock);
if (desc_count == 0)
@@ -652,6 +662,11 @@ void ol_tx_flow_pool_map_handler(uint8_t flow_id, uint8_t flow_type,
case FLOW_TYPE_VDEV:
ol_tx_flow_pool_vdev_map(pool, flow_id);
+ qdf_spin_lock_bh(&pool->flow_pool_lock);
+ pdev->pause_cb(flow_id,
+ WLAN_WAKE_ALL_NETIF_QUEUE,
+ WLAN_DATA_FLOW_CONTROL);
+ qdf_spin_unlock_bh(&pool->flow_pool_lock);
break;
default:
if (pool_create)