From 748d8a27aa31666a78deb9d9a89fb0d141fb0bb1 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Mon, 21 Aug 2017 15:19:37 +0530 Subject: [PATCH] qcacld-3.0: Fix assert in qdf_mc_timer_stop for host roam timers The host roam timers are deactivated and deleted in lim_delete_timers_host_roam but again in lim_deactivate_timers they are deactivated which results in assert. Fix this by deactivating roam timers before they are destroyed. Change-Id: I03f069edaf4361111dc5240fce2003c04c9c6509 CRs-Fixed: 2095265 --- core/mac/src/pe/lim/lim_roam_timer_utils.c | 25 +++++++++++----------- core/mac/src/pe/lim/lim_timer_utils.c | 3 +-- core/mac/src/pe/lim/lim_utils.c | 16 +++----------- core/mac/src/pe/lim/lim_utils.h | 19 ++++++++++++++++ 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/core/mac/src/pe/lim/lim_roam_timer_utils.c b/core/mac/src/pe/lim/lim_roam_timer_utils.c index 3105f0cfeaad..827c1b4edc98 100644 --- a/core/mac/src/pe/lim/lim_roam_timer_utils.c +++ b/core/mac/src/pe/lim/lim_roam_timer_utils.c @@ -70,27 +70,26 @@ err_roam_timer: return TX_TIMER_ERROR; } -/** - * lim_delete_timers_host_roam() - Delete timers used in host based roaming - * @mac_ctx: Global MAC context - * - * Delete reassoc and preauth timers - * - * Return: none - */ void lim_delete_timers_host_roam(tpAniSirGlobal mac_ctx) { tLimTimers *lim_timer = &mac_ctx->lim.limTimers; - /* Deactivate and delete Reassociation failure timer. */ - tx_timer_deactivate(&lim_timer->gLimReassocFailureTimer); + /* Delete Reassociation failure timer. */ tx_timer_delete(&lim_timer->gLimReassocFailureTimer); - - /* Deactivate and delete FT Preauth response timer */ - tx_timer_deactivate(&lim_timer->gLimFTPreAuthRspTimer); + /* Delete FT Preauth response timer */ tx_timer_delete(&lim_timer->gLimFTPreAuthRspTimer); } +void lim_deactivate_timers_host_roam(tpAniSirGlobal mac_ctx) +{ + tLimTimers *lim_timer = &mac_ctx->lim.limTimers; + + /* Deactivate Reassociation failure timer. */ + tx_timer_deactivate(&lim_timer->gLimReassocFailureTimer); + /* Deactivate FT Preauth response timer */ + tx_timer_deactivate(&lim_timer->gLimFTPreAuthRspTimer); +} + /** * lim_deactivate_and_change_timer_host_roam() - Change timers in host roaming * @mac_ctx: Pointer to Global MAC structure diff --git a/core/mac/src/pe/lim/lim_timer_utils.c b/core/mac/src/pe/lim/lim_timer_utils.c index bc92c9d909e0..9d75b9770962 100644 --- a/core/mac/src/pe/lim/lim_timer_utils.c +++ b/core/mac/src/pe/lim/lim_timer_utils.c @@ -375,10 +375,10 @@ uint32_t lim_create_timers(tpAniSirGlobal pMac) return TX_SUCCESS; err_timer: + lim_delete_timers_host_roam(pMac); tx_timer_delete(&pMac->lim.limTimers.gLimDeauthAckTimer); tx_timer_delete(&pMac->lim.limTimers.gLimDisassocAckTimer); tx_timer_delete(&pMac->lim.limTimers.gLimRemainOnChannelTimer); - tx_timer_delete(&pMac->lim.limTimers.gLimFTPreAuthRspTimer); tx_timer_delete(&pMac->lim.limTimers.gLimUpdateOlbcCacheTimer); while (((int32_t)-- i) >= 0) { tx_timer_delete(&pMac->lim.limTimers.gpLimCnfWaitTimer[i]); @@ -386,7 +386,6 @@ err_timer: tx_timer_delete(&pMac->lim.limTimers.gLimProbeAfterHBTimer); tx_timer_delete(&pMac->lim.limTimers.gLimAuthFailureTimer); tx_timer_delete(&pMac->lim.limTimers.gLimAddtsRspTimer); - tx_timer_delete(&pMac->lim.limTimers.gLimReassocFailureTimer); tx_timer_delete(&pMac->lim.limTimers.open_sys_auth_timer); tx_timer_delete(&pMac->lim.limTimers.gLimAssocFailureTimer); tx_timer_delete(&pMac->lim.limTimers.gLimJoinFailureTimer); diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index e4b13012a541..b77215216f1d 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -586,11 +586,7 @@ void lim_deactivate_timers(tpAniSirGlobal mac_ctx) uint32_t n; tLimTimers *lim_timer = &mac_ctx->lim.limTimers; - /* Deactivate Reassociation failure timer. */ - tx_timer_deactivate(&lim_timer->gLimReassocFailureTimer); - - /* Deactivate FT Preauth response timer */ - tx_timer_deactivate(&lim_timer->gLimFTPreAuthRspTimer); + lim_deactivate_timers_host_roam(mac_ctx); /* Deactivate Periodic Probe channel timers. */ tx_timer_deactivate(&lim_timer->gLimPeriodicProbeReqTimer); @@ -647,12 +643,6 @@ void lim_deactivate_timers(tpAniSirGlobal mac_ctx) tx_timer_deactivate(&lim_timer->gLimDeauthAckTimer); - /* Deactivate Reassociation failure timer. */ - tx_timer_deactivate(&lim_timer->gLimReassocFailureTimer); - - /* Deactivate FT Preauth response timer */ - tx_timer_deactivate(&lim_timer->gLimFTPreAuthRspTimer); - tx_timer_deactivate(&lim_timer-> gLimP2pSingleShotNoaInsertTimer); @@ -684,9 +674,9 @@ void lim_cleanup_mlm(tpAniSirGlobal mac_ctx) if (mac_ctx->lim.gLimTimersCreated == 1) { lim_timer = &mac_ctx->lim.limTimers; - lim_delete_timers_host_roam(mac_ctx); - lim_deactivate_timers(mac_ctx); + + lim_delete_timers_host_roam(mac_ctx); /* Delete Periodic Probe channel timers. */ tx_timer_delete(&lim_timer->gLimPeriodicProbeReqTimer); diff --git a/core/mac/src/pe/lim/lim_utils.h b/core/mac/src/pe/lim/lim_utils.h index f94e9c5eeba0..c4445a324698 100644 --- a/core/mac/src/pe/lim/lim_utils.h +++ b/core/mac/src/pe/lim/lim_utils.h @@ -696,7 +696,25 @@ void lim_update_obss_scanparams(tpPESession session, void lim_init_obss_params(tpAniSirGlobal mac_ctx, tpPESession session); #ifdef WLAN_FEATURE_HOST_ROAM uint32_t lim_create_timers_host_roam(tpAniSirGlobal mac_ctx); +/** + * lim_delete_timers_host_roam() - Delete timers used in host based roaming + * @mac_ctx: Global MAC context + * + * Delete reassoc and preauth timers + * + * Return: none + */ void lim_delete_timers_host_roam(tpAniSirGlobal mac_ctx); +/** + * lim_deactivate_timers_host_roam() - deactivate timers used in host based + * roaming + * @mac_ctx: Global MAC context + * + * Delete reassoc and preauth timers + * + * Return: none + */ +void lim_deactivate_timers_host_roam(tpAniSirGlobal mac_ctx); void lim_deactivate_and_change_timer_host_roam(tpAniSirGlobal mac_ctx, uint32_t timer_id); #else @@ -706,6 +724,7 @@ static inline uint32_t lim_create_timers_host_roam(tpAniSirGlobal mac_ctx) } static inline void lim_delete_timers_host_roam(tpAniSirGlobal mac_ctx) {} +static inline void lim_deactivate_timers_host_roam(tpAniSirGlobal mac_ctx) {} static inline void lim_deactivate_and_change_timer_host_roam( tpAniSirGlobal mac_ctx, uint32_t timer_id) {}