From 2972b6e3cbd366b4fd6cc6a5ff0946c2152167d9 Mon Sep 17 00:00:00 2001 From: Sreelakshmi Konamki Date: Mon, 17 Jul 2017 12:10:36 +0530 Subject: [PATCH] qcacld-3.0: Do not remove addts/delts command in csr_roam_sync_callback Currently addts and delts commands are removed as part of csr_roam_sync_callback. After successful roaming add_tspec of old connection is not processed in SME (entry of addts command is NULL in smeCmdActiveList). As there is no active add tspec in SME, VO data is downgraded to BE. To fix above issue, do not remove addts/delts commands from SME queue and in PE layer do the error handling for addts to send resp for all failure cases. Change-Id: Ibc7364d188c3002dd8067738f6bcc8fee2af2126 CRs-Fixed: 2076713 --- .../src/pe/lim/lim_process_sme_req_messages.c | 43 +++++++------------ core/sme/inc/sme_qos_internal.h | 11 ----- core/sme/src/csr/csr_api_roam.c | 1 - core/sme/src/qos/sme_qos.c | 21 --------- 4 files changed, 15 insertions(+), 61 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index e9d23e1297fb..b4253308a3f4 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -3569,10 +3569,7 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf) if (!LIM_IS_STA_ROLE(psessionEntry)) { pe_err("AddTs received on AP - ignoring"); - lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE, - psessionEntry, pSirAddts->req.tspec, - smesessionId, smetransactionId); - return; + goto send_failure_addts_rsp; } pStaDs = @@ -3581,19 +3578,13 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf) if (pStaDs == NULL) { pe_err("Cannot find AP context for addts req"); - lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE, - psessionEntry, pSirAddts->req.tspec, - smesessionId, smetransactionId); - return; + goto send_failure_addts_rsp; } if ((!pStaDs->valid) || (pStaDs->mlmStaContext.mlmState != eLIM_MLM_LINK_ESTABLISHED_STATE)) { pe_err("AddTs received in invalid MLM state"); - lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE, - psessionEntry, pSirAddts->req.tspec, - smesessionId, smetransactionId); - return; + goto send_failure_addts_rsp; } pSirAddts->req.wsmTspecPresent = 0; @@ -3610,20 +3601,14 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf) pSirAddts->req.lleTspecPresent = 1; else { pe_warn("ADDTS_REQ ignore - qos is disabled"); - lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE, - psessionEntry, pSirAddts->req.tspec, - smesessionId, smetransactionId); - return; + goto send_failure_addts_rsp; } if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) && (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) { pe_err("AddTs received in invalid LIMsme state (%d)", psessionEntry->limSmeState); - lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE, - psessionEntry, pSirAddts->req.tspec, - smesessionId, smetransactionId); - return; + goto send_failure_addts_rsp; } if (pMac->lim.gLimAddtsSent) { @@ -3632,10 +3617,7 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf) pMac->lim.gLimAddtsReq.req.tspec.tsinfo.traffic.tsid, pMac->lim.gLimAddtsReq.req.tspec.tsinfo.traffic. userPrio); - lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE, - psessionEntry, pSirAddts->req.tspec, - smesessionId, smetransactionId); - return; + goto send_failure_addts_rsp; } sir_copy_mac_addr(peerMac, psessionEntry->bssId); @@ -3656,21 +3638,21 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf) eSIR_SUCCESS) { pe_err("Unable to get Cfg param %d (Addts Rsp Timeout)", WNI_CFG_ADDTS_RSP_TIMEOUT); - return; + goto send_failure_addts_rsp; } timeout = SYS_MS_TO_TICKS(timeout); if (tx_timer_change(&pMac->lim.limTimers.gLimAddtsRspTimer, timeout, 0) != TX_SUCCESS) { pe_err("AddtsRsp timer change failed!"); - return; + goto send_failure_addts_rsp; } pMac->lim.gLimAddtsRspTimerCount++; if (tx_timer_change_context(&pMac->lim.limTimers.gLimAddtsRspTimer, pMac->lim.gLimAddtsRspTimerCount) != TX_SUCCESS) { pe_err("AddtsRsp timer change failed!"); - return; + goto send_failure_addts_rsp; } MTRACE(mac_trace (pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, @@ -3681,9 +3663,14 @@ static void __lim_process_sme_addts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf) if (tx_timer_activate(&pMac->lim.limTimers.gLimAddtsRspTimer) != TX_SUCCESS) { pe_err("AddtsRsp timer activation failed!"); - return; + goto send_failure_addts_rsp; } return; + +send_failure_addts_rsp: + lim_send_sme_addts_rsp(pMac, pSirAddts->rspReqd, eSIR_FAILURE, + psessionEntry, pSirAddts->req.tspec, + smesessionId, smetransactionId); } static void __lim_process_sme_delts_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf) diff --git a/core/sme/inc/sme_qos_internal.h b/core/sme/inc/sme_qos_internal.h index 109fd50cfa67..9c66febfa6ea 100644 --- a/core/sme/inc/sme_qos_internal.h +++ b/core/sme/inc/sme_qos_internal.h @@ -123,17 +123,6 @@ QDF_STATUS sme_qos_msg_processor(tpAniSirGlobal pMac, uint16_t msg_type, ------------------------------------------------------------------------*/ QDF_STATUS sme_qos_validate_params(tpAniSirGlobal pMac, tSirBssDescription *pBssDesc); -/** - * sme_qos_remove_addts_delts_cmd - Remove addts/delts command - * @mac_ctx: Pointer to the global MAC structure. - * @session_id: Session id - * - * This function is used to remove addts/delts command - * during csr roam sync callback. - * - * Return: void - */ -void sme_qos_remove_addts_delts_cmd(tpAniSirGlobal mac_ctx, uint8_t session_id); QDF_STATUS sme_qos_csr_event_ind(tpAniSirGlobal pMac, uint8_t sessionId, sme_qos_csr_event_indType ind, void *pEvent_info); diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 4f622bf83ebf..77d89deb2c20 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -19987,7 +19987,6 @@ static QDF_STATUS csr_process_roam_sync_callback(tpAniSirGlobal mac_ctx, eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED; sme_qos_csr_event_ind(mac_ctx, session_id, SME_QOS_CSR_REASSOC_COMPLETE, &assoc_info); - sme_qos_remove_addts_delts_cmd(mac_ctx, session_id); roam_info->pBssDesc = bss_desc; conn_profile->acm_mask = sme_qos_get_acm_mask(mac_ctx, bss_desc, NULL); diff --git a/core/sme/src/qos/sme_qos.c b/core/sme/src/qos/sme_qos.c index bf0d34686e35..b5bbe98017c1 100644 --- a/core/sme/src/qos/sme_qos.c +++ b/core/sme/src/qos/sme_qos.c @@ -908,27 +908,6 @@ QDF_STATUS sme_qos_validate_params(tpAniSirGlobal pMac, return status; } -void sme_qos_remove_addts_delts_cmd(tpAniSirGlobal mac_ctx, uint8_t session_id) -{ - tListElem *entry; - tSmeCmd *command; - - entry = csr_nonscan_active_ll_peek_head(mac_ctx, LL_ACCESS_LOCK); - if (NULL == entry) - return; - command = GET_BASE_ADDR(entry, tSmeCmd, Link); - if ((eSmeCommandAddTs == command->command || - eSmeCommandDelTs == command->command) && - command->sessionId == session_id) { - if (csr_nonscan_active_ll_remove_entry(mac_ctx, entry, - LL_ACCESS_LOCK)) { - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, - "%s: removed addts/delts command", __func__); - qos_release_command(mac_ctx, command); - } - } -} - /*-------------------------------------------------------------------------- \brief sme_qos_csr_event_ind() - The QoS sub-module in SME expects notifications from CSR when certain events occur as mentioned in sme_qos_csr_event_indType.