瀏覽代碼

qcacld-3.0: Indicate failure to HDD if HW mode change timesout

If HW mode change timeout happens during connect req in CSR,
the status received by HDD is success and it assumes connect is
queued and does not reset the HDD state. This lead to subsequent
scan failures.

To fix, return failure status to HDD if HW mode change timesout.
Also avoid sending QDF status to supplicant as part of connect
failure.

Change-Id: I49d189ad75a585d894b5e819190c2dc3d9cc1453
CRs-fixed: 2031149
Abhishek Singh 8 年之前
父節點
當前提交
471652b272
共有 2 個文件被更改,包括 7 次插入5 次删除
  1. 6 5
      core/hdd/src/wlan_hdd_cfg80211.c
  2. 1 0
      core/sme/src/csr/csr_api_roam.c

+ 6 - 5
core/hdd/src/wlan_hdd_cfg80211.c

@@ -13039,9 +13039,9 @@ static int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
 			pHddCtx->hdd_psoc, false);
 		if (policy_mgr_is_hw_mode_change_in_progress(
 			pHddCtx->hdd_psoc)) {
-			status = policy_mgr_wait_for_connection_update(
+			qdf_status = policy_mgr_wait_for_connection_update(
 				pHddCtx->hdd_psoc);
-			if (!QDF_IS_STATUS_SUCCESS(status)) {
+			if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
 				hdd_err("qdf wait for event failed!!");
 				status = -EINVAL;
 				goto ret_status;
@@ -13167,9 +13167,9 @@ static int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
 			 * to firmware if power save is enabled by the
 			 * firmware.
 			 */
-			status = hdd_set_ibss_power_save_params(pAdapter);
+			qdf_status = hdd_set_ibss_power_save_params(pAdapter);
 
-			if (QDF_STATUS_SUCCESS != status) {
+			if (QDF_STATUS_SUCCESS != qdf_status) {
 				hdd_err("Set IBSS Power Save Params Failed");
 				status = -EINVAL;
 				goto conn_failure;
@@ -13271,6 +13271,8 @@ static int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
 		qdf_status = sme_roam_connect(WLAN_HDD_GET_HAL_CTX(pAdapter),
 					  pAdapter->sessionId, pRoamProfile,
 					  &roamId);
+		if (QDF_IS_STATUS_ERROR(qdf_status))
+			status = qdf_status_to_os_return(qdf_status);
 
 		if ((QDF_STATUS_SUCCESS != qdf_status) &&
 		    (QDF_STA_MODE == pAdapter->device_mode ||
@@ -13278,7 +13280,6 @@ static int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
 			hdd_err("sme_roam_connect (session %d) failed with "
 			       "qdf_status %d. -> NotConnected",
 			       pAdapter->sessionId, qdf_status);
-			status = qdf_status_to_os_return(qdf_status);
 			/* change back to NotAssociated */
 			hdd_conn_set_connection_state(pAdapter,
 						      eConnectionState_NotConnected);

+ 1 - 0
core/sme/src/csr/csr_api_roam.c

@@ -7990,6 +7990,7 @@ QDF_STATUS csr_roam_connect(tpAniSirGlobal pMac, uint32_t sessionId,
 					sme_debug("conn update error");
 					csr_scan_result_purge(pMac, hBSSList);
 					fCallCallback = true;
+					status = QDF_STATUS_E_TIMEOUT;
 					goto error;
 			} else if (status == QDF_STATUS_E_FAILURE) {
 				sme_debug("conn update error");