From ba3b431b293a26f96157997f949ccb31e7b7153c Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Fri, 29 Apr 2016 16:40:20 -0700 Subject: [PATCH] qcacld-3.0: Fix the issue in processing the del_tspec req SME qos expects the RIC data and RIC data length to process the add_ts response after roaming and updates the qos state to QOS_ON after the successful processing. RIC data is included in re-assoc response frame and updated in pe session. Since the RIC data info is not given to SME qos in roam sync event processing, qos state is not updated, hence the del_tspec command is buffered and not processed. Send the RIC data info to SME qos in roam sync processing so that the SME qos state is updated properly and processes any buffered commands. Change-Id: I7551b0bab4f11fe2d68c014cf89834ba199ad5ff CRs-Fixed: 1010374 --- core/mac/src/pe/lim/lim_api.c | 26 ++++++++++++++++++++++++++ core/sme/src/csr/csr_api_roam.c | 14 ++++++++++++++ core/sme/src/csr/csr_neighbor_roam.c | 10 +++++----- core/sme/src/qos/sme_qos.c | 7 ++++++- core/wma/src/wma_scan_roam.c | 5 +---- 5 files changed, 52 insertions(+), 10 deletions(-) diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index c893536b0d18..31df90976b53 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -1878,6 +1878,7 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx, tpAddBssParams add_bss_params; uint8_t local_nss; QDF_STATUS status = QDF_STATUS_E_FAILURE; + uint16_t join_rsp_len; if (!roam_sync_ind_ptr) { lim_log(mac_ctx, LOGE, FL("LFR3:roam_sync_ind_ptr is NULL")); @@ -1987,6 +1988,31 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx, curr_sta_ds->nss = local_nss; ft_session_ptr->limMlmState = eLIM_MLM_LINK_ESTABLISHED_STATE; lim_init_tdls_data(mac_ctx, ft_session_ptr); + join_rsp_len = ft_session_ptr->RICDataLen + sizeof(tSirSmeJoinRsp) - + sizeof(uint8_t); + roam_sync_ind_ptr->join_rsp = qdf_mem_malloc(join_rsp_len); + if (NULL == roam_sync_ind_ptr->join_rsp) { + lim_log(mac_ctx, LOGE, FL("LFR3:mem alloc failed")); + ft_session_ptr->bRoamSynchInProgress = false; + if (mac_ctx->roam.pReassocResp) + qdf_mem_free(mac_ctx->roam.pReassocResp); + mac_ctx->roam.pReassocResp = NULL; + return QDF_STATUS_E_NOMEM; + } + qdf_mem_zero(roam_sync_ind_ptr->join_rsp, join_rsp_len); + + lim_log(mac_ctx, LOG1, FL("Session RicLength = %d"), + ft_session_ptr->RICDataLen); + if (ft_session_ptr->ricData != NULL) { + roam_sync_ind_ptr->join_rsp->parsedRicRspLen = + ft_session_ptr->RICDataLen; + qdf_mem_copy(roam_sync_ind_ptr->join_rsp->frames, + ft_session_ptr->ricData, + roam_sync_ind_ptr->join_rsp->parsedRicRspLen); + qdf_mem_free(ft_session_ptr->ricData); + ft_session_ptr->ricData = NULL; + ft_session_ptr->RICDataLen = 0; + } roam_sync_ind_ptr->join_rsp->vht_channel_width = ft_session_ptr->ch_width; roam_sync_ind_ptr->join_rsp->staId = curr_sta_ds->staIndex; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 1a732e3ee09d..4e921b45b316 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -18723,6 +18723,7 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, struct qdf_mac_addr bcast_mac = QDF_MAC_ADDR_BROADCAST_INITIALIZER; tpAddBssParams add_bss_params; QDF_STATUS status = QDF_STATUS_SUCCESS; + uint16_t len; #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH tSirSmeHTProfile *src_profile = NULL; tCsrRoamHTProfile *dst_profile = NULL; @@ -18883,6 +18884,19 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, FL("LFR3:Clear Connected info")); csr_roam_free_connected_info(mac_ctx, &session->connectedInfo); + len = roam_synch_data->join_rsp->parsedRicRspLen; + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, + FL("LFR3: RIC length - %d"), len); + if (len) { + session->connectedInfo.pbFrames = + qdf_mem_malloc(len); + if (session->connectedInfo.pbFrames != NULL) { + qdf_mem_copy(session->connectedInfo.pbFrames, + roam_synch_data->join_rsp->frames, len); + session->connectedInfo.nRICRspLength = + roam_synch_data->join_rsp->parsedRicRspLen; + } + } conn_profile->vht_channel_width = roam_synch_data->join_rsp->vht_channel_width; add_bss_params = (tpAddBssParams)roam_synch_data->add_bss_params; diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c index 4667d82ef3ab..e285f5394a84 100644 --- a/core/sme/src/csr/csr_neighbor_roam.c +++ b/core/sme/src/csr/csr_neighbor_roam.c @@ -1397,8 +1397,8 @@ static void csr_neighbor_roam_info_ctx_init( ngbr_roam_info->is11rAssoc = true; } else ngbr_roam_info->is11rAssoc = false; - NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("11rAssoc is = %d"), - ngbr_roam_info->is11rAssoc); + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO_HIGH, + FL("11rAssoc is = %d"), ngbr_roam_info->is11rAssoc); #ifdef FEATURE_WLAN_ESE /* Based on the auth scheme tell if we are 11r */ @@ -1408,9 +1408,9 @@ static void csr_neighbor_roam_info_ctx_init( ngbr_roam_info->isESEAssoc = true; } else ngbr_roam_info->isESEAssoc = false; - NEIGHBOR_ROAM_DEBUG(pMac, LOG2, - FL("isESEAssoc is = %d ft = %d"), - ngbr_roam_info->isESEAssoc, init_ft_flag); + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO_HIGH, + FL("isESEAssoc is = %d ft = %d"), + ngbr_roam_info->isESEAssoc, init_ft_flag); #endif /* If "Legacy Fast Roaming" is enabled */ if (csr_roam_is_fast_roam_enabled(pMac, session_id)) diff --git a/core/sme/src/qos/sme_qos.c b/core/sme/src/qos/sme_qos.c index 1aaf22a735b5..641943e38f76 100644 --- a/core/sme/src/qos/sme_qos.c +++ b/core/sme/src/qos/sme_qos.c @@ -4632,7 +4632,12 @@ QDF_STATUS sme_qos_process_reassoc_success_ev(tpAniSirGlobal mac_ctx, if (csr_roam_session && csr_roam_session->connectedInfo.nRICRspLength) { status = sme_qos_process_ft_reassoc_rsp_ev( - mac_ctx, sessionid, event_info); + mac_ctx, sessionid, + event_info); + } else { + QDF_TRACE(QDF_MODULE_ID_SME, + QDF_TRACE_LEVEL_ERROR, FL( + "session or RIC data is not present")); } } #ifdef FEATURE_WLAN_ESE diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 73f6e6fc4884..f47b43e9325d 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2078,15 +2078,12 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event, goto cleanup_label; } bss_desc_ptr = qdf_mem_malloc(sizeof(tSirBssDescription) + ie_len); - roam_synch_ind_ptr->join_rsp = qdf_mem_malloc(sizeof(tSirSmeJoinRsp)); - if ((NULL == roam_synch_ind_ptr->join_rsp) || (NULL == bss_desc_ptr)) { + if (NULL == bss_desc_ptr) { WMA_LOGE("LFR3: mem alloc failed!"); QDF_ASSERT(bss_desc_ptr != NULL); - QDF_ASSERT(roam_synch_ind_ptr->join_rsp != NULL); status = -ENOMEM; goto cleanup_label; } - qdf_mem_zero(roam_synch_ind_ptr->join_rsp, sizeof(tSirSmeJoinRsp)); qdf_mem_zero(bss_desc_ptr, sizeof(tSirBssDescription) + ie_len); wma->pe_roam_synch_cb((tpAniSirGlobal)wma->mac_context, roam_synch_ind_ptr, bss_desc_ptr);