瀏覽代碼

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
Abhishek Singh 7 年之前
父節點
當前提交
748d8a27aa

+ 11 - 12
core/mac/src/pe/lim/lim_roam_timer_utils.c

@@ -70,25 +70,24 @@ 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);
+	/* 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 and delete FT Preauth response timer */
+	/* Deactivate Reassociation failure timer. */
+	tx_timer_deactivate(&lim_timer->gLimReassocFailureTimer);
+	/* Deactivate FT Preauth response timer */
 	tx_timer_deactivate(&lim_timer->gLimFTPreAuthRspTimer);
-	tx_timer_delete(&lim_timer->gLimFTPreAuthRspTimer);
 }
 
 /**

+ 1 - 2
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);

+ 3 - 13
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);
 

+ 19 - 0
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)
 {}