diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index b9be0480092b..0903485056e1 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -3966,10 +3966,20 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, break; } + mutex_lock(&pHddCtx->tdls_lock); + pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + if (!pHddTdlsCtx) { + mutex_unlock(&pHddCtx->tdls_lock); + hdd_info("TDLS ctx is null, ignore roamResult (%d)", + roamResult); + status = QDF_STATUS_E_FAILURE; + break; + } + curr_peer = wlan_hdd_tdls_get_peer(pAdapter, pRoamInfo->peerMac.bytes, - true); + false); if (!curr_peer) { hdd_info("curr_peer is null"); status = QDF_STATUS_E_FAILURE; @@ -4002,6 +4012,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, } status = QDF_STATUS_SUCCESS; } + mutex_unlock(&pHddCtx->tdls_lock); break; } diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index b1f2de1e8fc9..1c688e6be7dc 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -5439,7 +5439,6 @@ int hdd_set_tdls_offchannelmode(hdd_adapter_t *adapter, int offchanmode) * wlan_hdd_tdls_ct_sampling_tx_rx() - collect tx/rx traffic sample * @adapter: pointer to hdd adapter * @hdd_ctx: hdd context - * @tdls_ctx: tdls context * * Function to update data traffic information in tdls connection * tracker data structure for connection tracker operation @@ -5447,8 +5446,7 @@ int hdd_set_tdls_offchannelmode(hdd_adapter_t *adapter, int offchanmode) * Return: None */ static void wlan_hdd_tdls_ct_sampling_tx_rx(hdd_adapter_t *adapter, - hdd_context_t *hdd_ctx, - tdlsCtx_t *tdls_ctx) + hdd_context_t *hdd_ctx) { hddTdlsPeer_t *curr_peer; uint8_t mac[QDF_MAC_ADDR_SIZE]; @@ -5474,7 +5472,7 @@ static void wlan_hdd_tdls_ct_sampling_tx_rx(hdd_adapter_t *adapter, hdd_ctx->valid_mac_entries = 0; qdf_spin_unlock_bh(&hdd_ctx->tdls_ct_spinlock); - + mutex_lock(&hdd_ctx->tdls_lock); for (mac_cnt = 0; mac_cnt < valid_mac_entries; mac_cnt++) { memcpy(mac, ct_peer_mac_table[mac_cnt].mac_address.bytes, QDF_MAC_ADDR_SIZE); @@ -5486,6 +5484,7 @@ static void wlan_hdd_tdls_ct_sampling_tx_rx(hdd_adapter_t *adapter, ct_peer_mac_table[mac_cnt].rx_packet_cnt; } } + mutex_unlock(&hdd_ctx->tdls_lock); } /** @@ -5573,7 +5572,6 @@ void wlan_hdd_tdls_update_tx_pkt_cnt(hdd_adapter_t *adapter, { hdd_context_t *hdd_ctx; hdd_station_ctx_t *hdd_sta_ctx; - tdlsCtx_t *tdls_ctx; uint8_t mac_cnt; uint8_t valid_mac_entries; struct qdf_mac_addr *mac_addr; @@ -5592,8 +5590,6 @@ void wlan_hdd_tdls_update_tx_pkt_cnt(hdd_adapter_t *adapter, QDF_MAC_ADDR_SIZE) == 0) return; - tdls_ctx = adapter->sessionCtx.station.pHddTdlsCtx; - qdf_spin_lock_bh(&hdd_ctx->tdls_ct_spinlock); valid_mac_entries = hdd_ctx->valid_mac_entries; @@ -6045,24 +6041,23 @@ static void wlan_hdd_tdls_ct_handler(void *user_data) if (0 != (wlan_hdd_validate_context(hdd_ctx))) return; - - mutex_lock(&hdd_ctx->tdls_lock); - hdd_tdls_ctx = adapter->sessionCtx.station.pHddTdlsCtx; - - if (NULL == hdd_tdls_ctx) { - hdd_err("Invalid hdd_tdls_ctx context"); + /* If any concurrency is detected */ + if (!hdd_ctx->enable_tdls_connection_tracker) { + hdd_info("Connection tracker is disabled"); return; } - /* If any concurrency is detected */ - if (!hdd_ctx->enable_tdls_connection_tracker) - goto restart_return; - - - /* Update tx rx traffic sample in tdls data structures */ - wlan_hdd_tdls_ct_sampling_tx_rx(adapter, hdd_ctx, - hdd_tdls_ctx); + wlan_hdd_tdls_ct_sampling_tx_rx(adapter, hdd_ctx); + + mutex_lock(&hdd_ctx->tdls_lock); + hdd_tdls_ctx = WLAN_HDD_GET_TDLS_CTX_PTR(adapter); + + if (NULL == hdd_tdls_ctx) { + mutex_unlock(&hdd_ctx->tdls_lock); + hdd_err("Invalid hdd_tdls_ctx context"); + return; + } for (i = 0; i < TDLS_PEER_LIST_SIZE; i++) { head = &hdd_tdls_ctx->peer_list[i]; @@ -6075,8 +6070,6 @@ static void wlan_hdd_tdls_ct_handler(void *user_data) } } - -restart_return: wlan_hdd_tdls_timer_restart(hdd_tdls_ctx->pAdapter, &hdd_tdls_ctx->peer_update_timer, hdd_tdls_ctx->threshold_config.tx_period_t);