diff options
| author | Mahesh Kumar Kalikot Veetil <mkalikot@qca.qualcomm.com> | 2015-08-27 18:20:15 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-08-31 14:14:11 +0530 |
| commit | f868b8a5de47abe91a03feff2e8786789fe14564 (patch) | |
| tree | 6e7f7dabb8cf444b0b3fd8136b6cc12fff32b68b | |
| parent | fc0d5d08359b9849df2a9adb29c605c20b9bf10c (diff) | |
qcacld-2.0: Fix a race on disassoc request
PE generated disassoc request is not serialized in SME queue. This
results in corrupting 'lim.limDisassocDeauthCnfReq.pMlmDisassocReq'
which is a global context to save disassoc request. Fix this condition
by making all disassoc requests not to wait for completion. So both
request and cleanup happens without a context switch.
Change-Id: Iac2c0afa26fbb977b1315ed7733687bc90751430
CRs-Fixed: 898350
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c | 15 | ||||
| -rw-r--r-- | Kbuild | 4 |
2 files changed, 19 insertions, 0 deletions
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c index c323394c5d8e..0ff161f12535 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c @@ -2897,7 +2897,21 @@ limProcessMlmDisassocReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_ if (sendDisassocFrame && (pMlmDisassocReq->reasonCode != eSIR_MAC_DISASSOC_DUE_TO_FTHANDOFF_REASON)) { pMac->lim.limDisassocDeauthCnfReq.pMlmDisassocReq = pMlmDisassocReq; +#ifdef MDM_PLATFORM + limSendDisassocMgmtFrame(pMac, + pMlmDisassocReq->reasonCode, + pMlmDisassocReq->peerMacAddr, + psessionEntry, FALSE); + /* Send Disassoc CNF and receive path cleanup */ + limSendDisassocCnf(pMac); + /* + * Abort Tx so that data frames won't be sent to the AP + * after sending Disassoc. + */ + if (LIM_IS_STA_ROLE(psessionEntry)) + WDA_TxAbort(psessionEntry->smeSessionId); +#else /* If the reason for disassociation is inactivity of STA, then dont wait for acknowledgement */ if ((pMlmDisassocReq->reasonCode == eSIR_MAC_DISASSOC_DUE_TO_INACTIVITY_REASON) && @@ -2925,6 +2939,7 @@ limProcessMlmDisassocReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_ if (LIM_IS_STA_ROLE(psessionEntry)) WDA_TxAbort(psessionEntry->smeSessionId); } +#endif } else { @@ -968,6 +968,10 @@ ifeq ($(CONFIG_ARCH_MSM), y) CDEFINES += -DMSM_PLATFORM endif +ifeq ($(CONFIG_MOBILE_ROUTER), y) +CDEFINES += -DMDM_PLATFORM +endif + CDEFINES += -DOSIF_NEED_RX_PEER_ID \ -DQCA_SUPPORT_TXRX_LOCAL_PEER_ID ifeq ($(CONFIG_ROME_IF),pci) |
