diff options
| author | Ratnam Rachuri <c_rrachu@qti.qualcomm.com> | 2015-09-11 09:59:06 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-09-25 18:45:35 +0530 |
| commit | ee2acbbb0edc8dfe1b64c3d4826d70478c7d6417 (patch) | |
| tree | 454cc334cba619c10bf3b9888bcaa71c87366cbf | |
| parent | c9f7cea991ec987f2db6e306d7062d618a0f6ddb (diff) | |
qcacld-2.0: Send the exit bmps request even if pmc state is uapsd.
prima to qcacld-2.0 propagation
The below scenario is leading to race condition.
1) pmc state is BMPS and enter uaspd is posted to SME.
2) Disconnect comes and pmc state is BMPS, so exit bmps
is posted to SME.
3) SME processes enter uaspd and change pmc state to uapsd.
4) SME processes exit bmps and drop this command if pmc state
is not BMPS.
Due to this roamCmdPendinglist is not processed and VOS_BUG
happens when 30 commands are posted in this list.
To mitigate this issue, send the exit bmps when pmc state is
uapsd or bmps.
Change-Id: I3f7f906381350137a82f2aade6567be4917e5b8b
CRs-Fixed: 884380
| -rw-r--r-- | CORE/SME/src/pmc/pmc.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/CORE/SME/src/pmc/pmc.c b/CORE/SME/src/pmc/pmc.c index 9dd91d13fbb2..b9d31e5848af 100644 --- a/CORE/SME/src/pmc/pmc.c +++ b/CORE/SME/src/pmc/pmc.c @@ -2246,8 +2246,9 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) break; case eSmeCommandExitBmps: - if( BMPS == pMac->pmc.pmcState ) + if(( BMPS == pMac->pmc.pmcState ) || (UAPSD == pMac->pmc.pmcState)) { + tPmcState origState = pMac->pmc.pmcState; pMac->pmc.requestFullPowerPending = FALSE; status = pmcSendMessage( pMac, eWNI_PMC_EXIT_BMPS_REQ, @@ -2261,6 +2262,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { + pMac->pmc.pmcState = origState; pmcLog(pMac, LOGE, FL("eWNI_PMC_EXIT_BMPS_REQ fail to be sent to PE status %d"), status); pmcEnterFullPowerState(pMac); } |
