summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMukul Sharma <mukul@qti.qualcomm.com>2015-06-17 18:59:19 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2015-06-25 08:16:49 -0700
commite4e455942a8f186fa021ba78ceec3891fb2e08b1 (patch)
treeb116cc4f61715046530381ac1b82d7c4b1078ea4
parent4ebb297e8a8edc67dc006adc3b46f7487aecdb19 (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.c9
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c16
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c1
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) {