From 6a73017649c858ec5714f1f9c8d88147f50f5452 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Fri, 29 Dec 2017 14:07:21 +0530 Subject: [PATCH] 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 --- .../src/pe/lim/lim_process_mlm_req_messages.c | 41 ++----------------- core/mac/src/pe/lim/lim_types.h | 40 +++++++++++++++++- core/mac/src/pe/lim/lim_utils.c | 15 +++++++ 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index 3c434f520fc1..34c07a319acf 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/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; diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index d31d90be901f..6998137891fe 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/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 */ diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index 7b572b7c135e..3ee189d9adb6 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/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);