فهرست منبع

qcacld-3.0: Fix roam cmd stuck during graceful shutdown

If connect timers like join, auth and assoc timeout are running and
timer are stopped in deactivate lim timers, the connect cmd get stuck
in sme active cmd queue, if no probe resp, auth or assoc resp is
received respectively from AP.

Thus during deactivate lim timers call the timeout API for the
connect timeouts so that connect command fails and is removed from
sme active cmd queue.

Change-Id: I1ddd23ad94fb4b616b9a7868316f05577d6524b3
CRs-Fixed: 2164061
Abhishek Singh 7 سال پیش
والد
کامیت
6a73017649
3فایلهای تغییر یافته به همراه58 افزوده شده و 38 حذف شده
  1. 4 37
      core/mac/src/pe/lim/lim_process_mlm_req_messages.c
  2. 39 1
      core/mac/src/pe/lim/lim_types.h
  3. 15 0
      core/mac/src/pe/lim/lim_utils.c

+ 4 - 37
core/mac/src/pe/lim/lim_process_mlm_req_messages.c

@@ -59,10 +59,7 @@ static void lim_process_mlm_set_keys_req(tpAniSirGlobal, uint32_t *);
 
 /* MLM Timeout event handler templates */
 static void lim_process_periodic_probe_req_timer(tpAniSirGlobal mac_ctx);
-static void lim_process_join_failure_timeout(tpAniSirGlobal);
-static void lim_process_auth_failure_timeout(tpAniSirGlobal);
 static void lim_process_auth_rsp_timeout(tpAniSirGlobal, uint32_t);
-static void lim_process_assoc_failure_timeout(tpAniSirGlobal, uint32_t);
 static void lim_process_periodic_join_probe_req_timer(tpAniSirGlobal);
 static void lim_process_auth_retry_timer(tpAniSirGlobal);
 
@@ -2150,17 +2147,7 @@ static void lim_process_periodic_probe_req_timer(tpAniSirGlobal mac_ctx)
 	}
 }
 
-/**
- * lim_process_join_failure_timeout() - This function is called to process
- * JoinFailureTimeout
- *
- * @mac_ctx:      Pointer to Global MAC structure
- *
- * This function is called to process JoinFailureTimeout
- *
- * @Return None
- */
-static void lim_process_join_failure_timeout(tpAniSirGlobal mac_ctx)
+void lim_process_join_failure_timeout(tpAniSirGlobal mac_ctx)
 {
 	tLimMlmJoinCnf mlm_join_cnf;
 	uint32_t len;
@@ -2325,17 +2312,7 @@ static void lim_process_auth_retry_timer(tpAniSirGlobal mac_ctx)
 	return;
 } /*** lim_process_auth_retry_timer() ***/
 
-/**
- * lim_process_auth_failure_timeout() - This function is called to process Min
- * Channel Timeout during channel scan.
- *
- * @mac_ctx:      Pointer to Global MAC structure
- *
- * This function is called to process Min Channel Timeout during channel scan.
- *
- * @Return: None
- */
-static void lim_process_auth_failure_timeout(tpAniSirGlobal mac_ctx)
+void lim_process_auth_failure_timeout(tpAniSirGlobal mac_ctx)
 {
 	/* fetch the sessionEntry based on the sessionId */
 	tpPESession session;
@@ -2450,18 +2427,8 @@ lim_process_auth_rsp_timeout(tpAniSirGlobal mac_ctx, uint32_t auth_idx)
 	}
 }
 
-/**
- * lim_process_assoc_failure_timeout() - This function is called to process Min
- * Channel Timeout during channel scan.
- *
- * @mac_ctx      Pointer to Global MAC structure
- *
- * This function is called to process Min Channel Timeout during channel scan.
- *
- * @Return: None
- */
-static void
-lim_process_assoc_failure_timeout(tpAniSirGlobal mac_ctx, uint32_t msg_type)
+void lim_process_assoc_failure_timeout(tpAniSirGlobal mac_ctx,
+						     uint32_t msg_type)
 {
 
 	tLimMlmAssocCnf mlm_assoc_cnf;

+ 39 - 1
core/mac/src/pe/lim/lim_types.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -983,4 +983,42 @@ enum {
 
 QDF_STATUS lim_send_addba_response_frame(tpAniSirGlobal mac_ctx,
 		tSirMacAddr peer_mac, uint16_t tid, tpPESession session);
+
+/**
+ * lim_process_join_failure_timeout() - This function is called to process
+ * JoinFailureTimeout
+ *
+ * @mac_ctx: Pointer to Global MAC structure
+ *
+ * This function is called to process JoinFailureTimeout
+ *
+ * @Return None
+ */
+void lim_process_join_failure_timeout(tpAniSirGlobal mac_ctx);
+
+/**
+ * lim_process_auth_failure_timeout() - This function is called to process Min
+ * Channel Timeout during channel scan.
+ *
+ * @mac_ctx: Pointer to Global MAC structure
+ *
+ * This function is called to process Min Channel Timeout during channel scan.
+ *
+ * @Return: None
+ */
+void lim_process_auth_failure_timeout(tpAniSirGlobal mac_ctx);
+
+/**
+ * lim_process_assoc_failure_timeout() - This function is called to process Min
+ * Channel Timeout during channel scan.
+ *
+ * @mac_ctx: Pointer to Global MAC structure
+ * @msg_type: Assoc or reassoc
+ *
+ * This function is called to process Min Channel Timeout during channel scan.
+ *
+ * @Return: None
+ */
+void lim_process_assoc_failure_timeout(tpAniSirGlobal mac_ctx,
+				       uint32_t msg_type);
 #endif /* __LIM_TYPES_H */

+ 15 - 0
core/mac/src/pe/lim/lim_utils.c

@@ -562,6 +562,11 @@ void lim_deactivate_timers(tpAniSirGlobal mac_ctx)
 	/* Deactivate addts response timer. */
 	tx_timer_deactivate(&lim_timer->gLimAddtsRspTimer);
 
+	if (tx_timer_running(&lim_timer->gLimJoinFailureTimer)) {
+		pe_err("Join failure timer running call the timeout API");
+		/* Cleanup as if join timer expired */
+		lim_process_join_failure_timeout(mac_ctx);
+	}
 	/* Deactivate Join failure timer. */
 	tx_timer_deactivate(&lim_timer->gLimJoinFailureTimer);
 
@@ -572,9 +577,19 @@ void lim_deactivate_timers(tpAniSirGlobal mac_ctx)
 	tx_timer_deactivate
 			(&lim_timer->g_lim_periodic_auth_retry_timer);
 
+	if (tx_timer_running(&lim_timer->gLimAssocFailureTimer)) {
+		pe_err("Assoc failure timer running call the timeout API");
+		/* Cleanup as if assoc timer expired */
+		lim_process_assoc_failure_timeout(mac_ctx, LIM_ASSOC);
+	}
 	/* Deactivate Association failure timer. */
 	tx_timer_deactivate(&lim_timer->gLimAssocFailureTimer);
 
+	if (tx_timer_running(&mac_ctx->lim.limTimers.gLimAuthFailureTimer)) {
+		pe_err("Auth failure timer running call the timeout API");
+		/* Cleanup as if auth timer expired */
+		lim_process_auth_failure_timeout(mac_ctx);
+	}
 	/* Deactivate Authentication failure timer. */
 	tx_timer_deactivate(&lim_timer->gLimAuthFailureTimer);