Parcourir la source

qcacld-3.0: Unpause priority queue before all netif queues

In ol_tx_flow_pool_map_handler, we will unpause all netif
queues. Unpausing will fail if any queue bitmap is not
cleared and pause_map remains non zero.

To avoid this, unpause priority queue before unpausing all
non priority queues.

Change-Id: If9a4e5d923b300aa03f01847da1ad64e8d6c61ef
CRs-Fixed: 2391158
Rakshith Suresh Patkar il y a 6 ans
Parent
commit
da3aa3367d
1 fichiers modifiés avec 8 ajouts et 5 suppressions
  1. 8 5
      core/dp/txrx/ol_txrx_flow_control.c

+ 8 - 5
core/dp/txrx/ol_txrx_flow_control.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2019 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -544,14 +544,14 @@ ol_tx_distribute_descs_to_deficient_pools(struct ol_tx_flow_pool_t *src_pool)
 			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);
-
 					pdev->pause_cb(dst_pool->member_flow_id,
 					      WLAN_NETIF_PRIORITY_QUEUE_ON,
 					      WLAN_DATA_FLOW_CONTROL_PRIORITY);
 
+					pdev->pause_cb(dst_pool->member_flow_id,
+						      WLAN_WAKE_ALL_NETIF_QUEUE,
+						      WLAN_DATA_FLOW_CONTROL);
+
 					dst_pool->status =
 						FLOW_POOL_ACTIVE_UNPAUSED;
 				}
@@ -802,6 +802,9 @@ 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);
+		pdev->pause_cb(flow_id,
+			       WLAN_NETIF_PRIORITY_QUEUE_ON,
+			       WLAN_DATA_FLOW_CONTROL_PRIORITY);
 		pdev->pause_cb(flow_id,
 			       WLAN_WAKE_ALL_NETIF_QUEUE,
 			       WLAN_DATA_FLOW_CONTROL);