From a1f6f5ad4de3fdd5c3e445b8d69a04a4c8e45e06 Mon Sep 17 00:00:00 2001 From: Kabilan Kannan Date: Tue, 17 Oct 2017 18:24:52 -0700 Subject: qcacld-3.0: Restart the tdls timer, when external peer is configured Sometimes TDLS timer is in stopped state, when external peer is configured and due to that connection takes longer duration. Restart the TDLS connection tracker timer explicitly when external peer is configured by user space. Change-Id: I0ab569eeb31d9d328847af8783b95200dbf055c9 CRs-Fixed: 2128568 --- core/hdd/src/wlan_hdd_tdls.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 24f3c23598f3..29dd6fb7e381 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -4502,6 +4502,7 @@ int wlan_hdd_tdls_extctrl_config_peer(hdd_adapter_t *pAdapter, hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); int status = 0; int ret; + tdlsCtx_t *tdls_ctx; QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_INFO, "%s : NL80211_TDLS_SETUP for " MAC_ADDRESS_STR, @@ -4511,6 +4512,10 @@ int wlan_hdd_tdls_extctrl_config_peer(hdd_adapter_t *pAdapter, if (ret) return ret; + tdls_ctx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + if (NULL == tdls_ctx) + return -EINVAL; + if ((false == pHddCtx->config->fTDLSExternalControl) || (false == pHddCtx->config->fEnableTDLSImplicitTrigger)) { QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_INFO, @@ -4588,6 +4593,12 @@ int wlan_hdd_tdls_extctrl_config_peer(hdd_adapter_t *pAdapter, /* set tdls connection tracker state */ cds_set_tdls_ct_mode(pHddCtx); + mutex_lock(&pHddCtx->tdls_lock); + if (pHddCtx->enable_tdls_connection_tracker) + wlan_hdd_tdls_implicit_enable(tdls_ctx); + mutex_unlock(&pHddCtx->tdls_lock); + + return status; rel_lock: mutex_unlock(&pHddCtx->tdls_lock); @@ -4610,6 +4621,7 @@ int wlan_hdd_tdls_extctrl_deconfig_peer(hdd_adapter_t *pAdapter, hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); int status = 0; int ret; + tdlsCtx_t *tdls_ctx; QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_INFO, "%s : NL80211_TDLS_TEARDOWN for " MAC_ADDRESS_STR, @@ -4619,6 +4631,10 @@ int wlan_hdd_tdls_extctrl_deconfig_peer(hdd_adapter_t *pAdapter, if (ret) return ret; + tdls_ctx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + if (NULL == tdls_ctx) + return -EINVAL; + if ((false == pHddCtx->config->fTDLSExternalControl) || (false == pHddCtx->config->fEnableTDLSImplicitTrigger)) { QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_INFO, @@ -4684,6 +4700,12 @@ int wlan_hdd_tdls_extctrl_deconfig_peer(hdd_adapter_t *pAdapter, /* set tdls connection tracker state */ cds_set_tdls_ct_mode(pHddCtx); + + mutex_lock(&pHddCtx->tdls_lock); + if (pHddCtx->enable_tdls_connection_tracker) + wlan_hdd_tdls_implicit_disable(tdls_ctx); + mutex_unlock(&pHddCtx->tdls_lock); + goto ret_status; rel_lock: -- cgit v1.2.3