Browse Source

qcacld-3.0: In SSR, clear flow control flag

When TX queues stopped by flow control right before SSR, corresponding
TX complete event used to clear the pause_map bit never come.
Flow control should reset its state during SSR, so clear this bit.

Change-Id: I462de1e20c9e2fc40476fc6b2d999c10e6396d8c
CRs-Fixed: 2274955
Nijun Gong 6 years ago
parent
commit
104ccc7742
1 changed files with 10 additions and 0 deletions
  1. 10 0
      core/hdd/src/wlan_hdd_main.c

+ 10 - 0
core/hdd/src/wlan_hdd_main.c

@@ -5440,6 +5440,16 @@ QDF_STATUS hdd_reset_all_adapters(struct hdd_context *hdd_ctx)
 					   WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER,
 					   WLAN_CONTROL_PATH);
 		}
+		/*
+		 * Clear fc flag if it was set before SSR to avoid TX queues
+		 * permanently stopped after SSR.
+		 * Here WLAN_START_ALL_NETIF_QUEUE will actually not start any
+		 * queue since it's blocked by reason WLAN_CONTROL_PATH.
+		 */
+		if (adapter->pause_map & (1 << WLAN_DATA_FLOW_CONTROL))
+			wlan_hdd_netif_queue_control(adapter,
+						     WLAN_START_ALL_NETIF_QUEUE,
+						     WLAN_DATA_FLOW_CONTROL);
 
 		hdd_reset_scan_operation(hdd_ctx, adapter);