Forráskód Böngészése

qcacld-3.0: reset dfs_cac_block_tx as soon after start bss event received

Make sure to first reset dfs_cac_block_tx (if operating channel is not
dfs) as soon as start bss event received. It is observed that in some
cases further processing of start bss event in hdd_hostapd_sap_event_cb
is failed and dfs_cac_block_tx flag remain set, because of this all the
tx packets from network layer are blocked. SAP continue to beacon but
peer stations failed to connect as SAP is blocked to transmit dhcp or
other data packets from network stack.

Change-Id: I045e38d6b826d2de64520fe9063e6123bc6650e6
CRs-Fixed: 2026958
Arif Hussain 8 éve
szülő
commit
e478b4d0be
1 módosított fájl, 18 hozzáadás és 18 törlés
  1. 18 18
      core/hdd/src/wlan_hdd_hostapd.c

+ 18 - 18
core/hdd/src/wlan_hdd_hostapd.c

@@ -1126,6 +1126,24 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent,
 
 		pHostapdState->qdf_status =
 			pSapEvent->sapevt.sapStartBssCompleteEvent.status;
+
+		qdf_atomic_set(&pHddCtx->dfs_radar_found, 0);
+		wlansap_get_dfs_ignore_cac(pHddCtx->hHal, &ignoreCAC);
+
+		/* DFS requirement: DO NOT transmit during CAC. */
+		if ((CHANNEL_STATE_DFS !=
+			wlan_reg_get_channel_state(pHddCtx->hdd_pdev,
+				pHddApCtx->operatingChannel))
+			|| ignoreCAC
+			|| pHddCtx->dev_dfs_cac_status == DFS_CAC_ALREADY_DONE)
+			pHddApCtx->dfs_cac_block_tx = false;
+		else
+			pHddApCtx->dfs_cac_block_tx = true;
+
+		hdd_debug("The value of dfs_cac_block_tx[%d] for ApCtx[%p]:%d",
+				pHddApCtx->dfs_cac_block_tx, pHddApCtx,
+				pHostapdAdapter->sessionId);
+
 		if (pHostapdState->qdf_status) {
 			hdd_err("startbss event failed!!");
 			/*
@@ -1243,24 +1261,6 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent,
 			}
 		}
 
-		qdf_atomic_set(&pHddCtx->dfs_radar_found, 0);
-
-		wlansap_get_dfs_ignore_cac(pHddCtx->hHal, &ignoreCAC);
-
-		/* DFS requirement: DO NOT transmit during CAC. */
-		if ((CHANNEL_STATE_DFS !=
-			wlan_reg_get_channel_state(pHddCtx->hdd_pdev,
-				pHddApCtx->operatingChannel))
-			|| ignoreCAC
-			|| pHddCtx->dev_dfs_cac_status == DFS_CAC_ALREADY_DONE)
-			pHddApCtx->dfs_cac_block_tx = false;
-		else
-			pHddApCtx->dfs_cac_block_tx = true;
-
-		hdd_debug("The value of dfs_cac_block_tx[%d] for ApCtx[%p]:%d",
-				pHddApCtx->dfs_cac_block_tx, pHddApCtx,
-				pHostapdAdapter->sessionId);
-
 		if ((CHANNEL_STATE_DFS == wlan_reg_get_channel_state(
 						pHddCtx->hdd_pdev,
 						pHddApCtx->operatingChannel))