diff options
| author | Rajeev Kumar <rajekuma@qca.qualcomm.com> | 2014-07-20 21:07:56 -0700 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-07-22 22:01:30 -0700 |
| commit | 9ced17330a77104da65aa6234ecdeab145ec7c67 (patch) | |
| tree | 0b7363265b607895bddc8b2746404cd67366fdbc | |
| parent | bc246399aa512f810c7fd87aada70a801a7e0883 (diff) | |
qcacld: Fix of scan list empty caused by deauth frames
Fix of race condition between deauth and ROAM preauth/
ROAM Re-assoc by dequeuing ROAM command from SME active
list after CSR state is changed to IDLE state.
Change-Id: I0a458226ec7fbc880d37f64221bdc7171f342cfd
CRs-Fixed: 697004
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 16 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrCmdProcess.c | 15 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrInsideApi.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrNeighborRoam.c | 2 |
4 files changed, 29 insertions, 6 deletions
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index e3aeb34c3c47..e8c6e6a0828a 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -6795,7 +6795,7 @@ eHalStatus csrRoamEnqueuePreauth(tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirB return (status); } -eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac) +eHalStatus csrDequeueRoamCommand(tpAniSirGlobal pMac, eCsrRoamReason reason) { tListElem *pEntry; tSmeCmd *pCommand; @@ -6804,14 +6804,24 @@ eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac) { pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); if ( (eSmeCommandRoam == pCommand->command) && - (eCsrPerformPreauth == pCommand->u.roamCmd.roamReason)) + (eCsrPerformPreauth == reason)) { smsLog( pMac, LOG1, FL("DQ-Command = %d, Reason = %d"), pCommand->command, pCommand->u.roamCmd.roamReason); if (csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK )) { csrReleaseCommandPreauth( pMac, pCommand ); } - } else { + } + else if ((eSmeCommandRoam == pCommand->command) && + (eCsrSmeIssuedFTReassoc == reason)) + { + smsLog( pMac, LOG1, FL("DQ-Command = %d, Reason = %d"), + pCommand->command, pCommand->u.roamCmd.roamReason); + if (csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK )) { + csrReleaseCommandRoam( pMac, pCommand ); + } + } + else { smsLog( pMac, LOGE, FL("Command = %d, Reason = %d "), pCommand->command, pCommand->u.roamCmd.roamReason); } diff --git a/CORE/SME/src/csr/csrCmdProcess.c b/CORE/SME/src/csr/csrCmdProcess.c index ff05c32bf0ff..9e6cdb3da86c 100644 --- a/CORE/SME/src/csr/csrCmdProcess.c +++ b/CORE/SME/src/csr/csrCmdProcess.c @@ -158,7 +158,20 @@ eHalStatus csrMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) } else { - smsLog(pMac, LOGW, " Message 0x%04X is not handled by CSR. CSR state is %d ", pSmeRsp->messageType, pMac->roam.curState[pSmeRsp->sessionId]); + smsLog(pMac, LOGE, "Message 0x%04X is not handled by CSR " + " CSR state is %d session Id %d", pSmeRsp->messageType, + pMac->roam.curState[pSmeRsp->sessionId], pSmeRsp->sessionId); + + if (eWNI_SME_FT_PRE_AUTH_RSP == pSmeRsp->messageType) { + smsLog(pMac, LOGE, "Dequeue eSmeCommandRoam command" + " with reason eCsrPerformPreauth"); + csrDequeueRoamCommand(pMac, eCsrPerformPreauth); + } + else if (eWNI_SME_REASSOC_RSP == pSmeRsp->messageType) { + smsLog(pMac, LOGE, "Dequeue eSmeCommandRoam command" + " with reason eCsrSmeIssuedFTReassoc"); + csrDequeueRoamCommand(pMac, eCsrSmeIssuedFTReassoc); + } } break; } diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h index 46be5f9c1193..d6fc72f0cbc4 100644 --- a/CORE/SME/src/csr/csrInsideApi.h +++ b/CORE/SME/src/csr/csrInsideApi.h @@ -1000,7 +1000,7 @@ eHalStatus csrGetCurrentCountryCode(tpAniSirGlobal pMac, tANI_U8 *pCountry); eHalStatus csrRoamEnqueuePreauth(tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirBssDescription pBssDescription, eCsrRoamReason reason, tANI_BOOLEAN fImmediate); -eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac); +eHalStatus csrDequeueRoamCommand(tpAniSirGlobal pMac, eCsrRoamReason reason); #ifdef FEATURE_WLAN_LFR void csrInitOccupiedChannelsList(tpAniSirGlobal pMac); tANI_BOOLEAN csrNeighborRoamIsNewConnectedProfile(tpAniSirGlobal pMac); diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c index 4062ae50845e..ebae4e53dc2c 100644 --- a/CORE/SME/src/csr/csrNeighborRoam.c +++ b/CORE/SME/src/csr/csrNeighborRoam.c @@ -1512,7 +1512,7 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l #endif DEQ_PREAUTH: - csrRoamDequeuePreauth(pMac); + csrDequeueRoamCommand(pMac, eCsrPerformPreauth); return preauthProcessed; } #endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */ |
