diff options
| author | Mukul Sharma <mukul@qti.qualcomm.com> | 2015-06-17 18:59:19 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-06-25 08:16:49 -0700 |
| commit | e4e455942a8f186fa021ba78ceec3891fb2e08b1 (patch) | |
| tree | b116cc4f61715046530381ac1b82d7c4b1078ea4 | |
| parent | 4ebb297e8a8edc67dc006adc3b46f7487aecdb19 (diff) | |
qcacld-2.0: Handle TX queues timeout when deauth come during ADD STA REQ
prima to qcacld-2.0 propagation
During Roaming Driver Disable the Tx queue and enable after
reassoc completion, but if deauth comes during roaming when
host is waiting for ADD STA RSP from fwr then Lim need to
send the reassoc resp with failure reason which in turn call
CSR to hdd for initiate disconnection handling. Currently this
reassoc response code was not handled into the CSR so clean-up
path for HDD is not getting invoked. Hence queues were remains
disabled and kernel panic occur.
Change-Id: I7e730f229331a57335fb0b3f23ad39c5d07c5b27
CRs-Fixed: 721012
| -rw-r--r-- | CORE/MAC/src/pe/lim/limAssocUtils.c | 9 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c | 16 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 1 |
3 files changed, 22 insertions, 4 deletions
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c index 557c4d2c4944..26adb47e9356 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.c +++ b/CORE/MAC/src/pe/lim/limAssocUtils.c @@ -851,17 +851,24 @@ limSendDelStaCnf(tpAniSirGlobal pMac, tSirMacAddr staDsAddr, //If there is a failure during rest of the assoc sequence, this context needs to be cleaned up. tANI_U8 smesessionId; tANI_U16 smetransactionId; + tLimSmeStates tempLimSmeState = eLIM_SME_IDLE_STATE; smesessionId = psessionEntry->smeSessionId; smetransactionId = psessionEntry->transactionId; + tempLimSmeState = psessionEntry->limSmeState; psessionEntry->limSmeState = eLIM_SME_JOIN_FAILURE_STATE; MTRACE(macTrace(pMac, TRACE_CODE_SME_STATE, psessionEntry->peSessionId, psessionEntry->limSmeState)); //if it is a reassoc failure to join new AP + //eSIR_SME_JOIN_DEAUTH_FROM_AP_DURING_ADD_STA result code is used + //during assoc and reassoc, so sme state req to distinguish them if((mlmStaContext.resultCode == eSIR_SME_FT_REASSOC_TIMEOUT_FAILURE) || (mlmStaContext.resultCode == eSIR_SME_FT_REASSOC_FAILURE) || - (mlmStaContext.resultCode == eSIR_SME_REASSOC_TIMEOUT_RESULT_CODE)) + (mlmStaContext.resultCode == eSIR_SME_REASSOC_TIMEOUT_RESULT_CODE) || + (mlmStaContext.resultCode == eSIR_SME_JOIN_DEAUTH_FROM_AP_DURING_ADD_STA && + tempLimSmeState == eLIM_SME_WT_REASSOC_STATE) + ) { if(mlmStaContext.resultCode != eSIR_SME_SUCCESS ) { diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index b3c91a09b61a..f9dd9d9c3070 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -1021,9 +1021,19 @@ limProcessMlmReassocCnf(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) pLimMlmReassocCnf->resultCode, pLimMlmReassocCnf->protStatusCode,psessionEntry, psessionEntry->smeSessionId,psessionEntry->transactionId); }else { - // Reassociation failure - psessionEntry->limSmeState = eLIM_SME_JOIN_FAILURE_STATE; - MTRACE(macTrace(pMac, TRACE_CODE_SME_STATE, psessionEntry->peSessionId, psessionEntry->limSmeState)); + /* If driver gets deauth when its waiting for ADD_STA_RSP then we need + * to do DEL_STA followed by DEL_BSS. So based on below reason-code here + * we decide whether to do only DEL_BSS or DEL_STA + DEL_BSS + */ + if(pLimMlmReassocCnf->resultCode + != eSIR_SME_JOIN_DEAUTH_FROM_AP_DURING_ADD_STA) + { + // Reassociation failure + psessionEntry->limSmeState = eLIM_SME_JOIN_FAILURE_STATE; + + } + + MTRACE(macTrace(pMac, TRACE_CODE_SME_STATE, psessionEntry->peSessionId, psessionEntry->limSmeState)); /** * Need to send Reassoc response with * Association failure to Host. diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 700a2bcb2bd7..d8995a9a84f4 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -8358,6 +8358,7 @@ static void csrRoamRoamingStateReassocRspProcessor( tpAniSirGlobal pMac, tpSirSm defined(FEATURE_WLAN_LFR) if ((eSIR_SME_FT_REASSOC_TIMEOUT_FAILURE == pSmeJoinRsp->statusCode) || (eSIR_SME_FT_REASSOC_FAILURE == pSmeJoinRsp->statusCode) || + (eSIR_SME_JOIN_DEAUTH_FROM_AP_DURING_ADD_STA == pSmeJoinRsp->statusCode) || (eSIR_SME_INVALID_PARAMETERS == pSmeJoinRsp->statusCode)) { /* Inform HDD to turn off FT flag in HDD */ if (pNeighborRoamInfo) { |
