summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhishek Singh <absingh@qti.qualcomm.com>2015-11-26 17:05:48 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2015-12-04 16:21:40 +0530
commitf78d94580efd6cd60d53ad5baa3f31342a97df64 (patch)
treee0d72db048b8901055c7c34a24b49558db4865f4
parent38f1aa5597dad2ebf5a22e53812871e22d42ccfa (diff)
qcacld-2.0: Abort preauth if disconnect is received for the current AP.
prima to qcacld-2.0 propagation. If preauth is in progress with too many APs in the roamable AP list and at the same time disconnect is received from supplicant as part of unload, the deauth req will be queued in sme pending list till csr completes the preauth process. Now as part of unload, driver may purge the sme pending command list and with it the disconnect command may also get removed if preauth takes too much time. This will lead to DEL BSS missing before HAL STOP and thus crash. To avoid this abort the preauth process once disconnect is received. Change-Id: I1c35f0c7e38295cfadafdad69f0b9a99ba61404c CRs-Fixed: 942579
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c2
-rw-r--r--CORE/SME/src/csr/csrInsideApi.h2
-rw-r--r--CORE/SME/src/csr/csrNeighborRoam.c11
3 files changed, 14 insertions, 1 deletions
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 3f270a1fdc27..34164bff7956 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -7858,7 +7858,7 @@ eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionI
}
-static boolean is_disconnect_pending(tpAniSirGlobal pmac,
+boolean is_disconnect_pending(tpAniSirGlobal pmac,
uint8_t sessionid)
{
tListElem *entry = NULL;
diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h
index 071d0120e663..bc0742373e42 100644
--- a/CORE/SME/src/csr/csrInsideApi.h
+++ b/CORE/SME/src/csr/csrInsideApi.h
@@ -1064,6 +1064,8 @@ void csrClearVotesForCountryInfo(tpAniSirGlobal pMac);
eHalStatus csr_send_ext_change_channel(tpAniSirGlobal mac_ctx,
uint32_t channel, uint8_t session_id);
+boolean is_disconnect_pending(tpAniSirGlobal pmac, uint8_t sessionid);
+
#ifdef QCA_HT_2040_COEX
eHalStatus csrSetHT2040Mode(tpAniSirGlobal pMac, tANI_U32 sessionId,
ePhyChanBondState cbMode, tANI_BOOLEAN obssEnabled);
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index d726de255530..9aa6dd950022 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -1579,6 +1579,7 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac,
{
tpCsrNeighborRoamBSSInfo pNeighborBssNode = NULL;
tListElem *pEntry;
+ bool is_dis_pending = false;
smsLog(pMac, LOGE, FL("Preauth failed retry number %d, status = 0x%x"),
pNeighborRoamInfo->FTRoamInfo.numPreAuthRetries, limStatus);
@@ -1631,11 +1632,21 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac,
}
}
+ is_dis_pending = is_disconnect_pending(pMac, sessionId);
+ if (is_dis_pending) {
+ smsLog(pMac, LOGE,
+ FL(" Disconnect in progress, Abort preauth"));
+ goto abort_preauth;
+ }
+
+
+
/* Issue preauth request for the same/next entry */
if (eHAL_STATUS_SUCCESS == csrNeighborRoamIssuePreauthReq(pMac,
sessionId))
goto DEQ_PREAUTH;
+abort_preauth:
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
if (csrRoamIsRoamOffloadScanEnabled(pMac))
{