summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRatnam Rachuri <c_rrachu@qti.qualcomm.com>2015-09-11 09:59:06 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2015-09-25 18:45:35 +0530
commitee2acbbb0edc8dfe1b64c3d4826d70478c7d6417 (patch)
tree454cc334cba619c10bf3b9888bcaa71c87366cbf
parentc9f7cea991ec987f2db6e306d7062d618a0f6ddb (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.c4
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);
}