summaryrefslogtreecommitdiff
path: root/CORE/MAC/src
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 /CORE/MAC/src
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
Diffstat (limited to 'CORE/MAC/src')
-rw-r--r--CORE/MAC/src/pe/lim/limAssocUtils.c9
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c16
2 files changed, 21 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.