summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/hdd/inc/wlan_hdd_tdls.h2
-rw-r--r--core/hdd/src/wlan_hdd_assoc.c6
-rw-r--r--core/hdd/src/wlan_hdd_tdls.c28
3 files changed, 22 insertions, 14 deletions
diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h
index 7fed1ef50092..837d7a41ace7 100644
--- a/core/hdd/inc/wlan_hdd_tdls.h
+++ b/core/hdd/inc/wlan_hdd_tdls.h
@@ -611,7 +611,7 @@ void wlan_hdd_tdls_timer_restart(hdd_adapter_t *pAdapter,
uint32_t expirationTime);
void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter,
hddTdlsPeer_t *curr_peer,
- uint16_t reason);
+ uint16_t reason, bool need_lock);
void wlan_hdd_tdls_implicit_send_discovery_request(tdlsCtx_t *hdd_tdls_ctx);
diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c
index bfad0e6539f9..8eebbc3f42b5 100644
--- a/core/hdd/src/wlan_hdd_assoc.c
+++ b/core/hdd/src/wlan_hdd_assoc.c
@@ -3770,7 +3770,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
wlan_hdd_tdls_find_peer(pAdapter,
pRoamInfo->peerMac.bytes, true);
wlan_hdd_tdls_indicate_teardown(pAdapter, curr_peer,
- pRoamInfo->reasonCode);
+ pRoamInfo->reasonCode, true);
hdd_send_wlan_tdls_teardown_event(eTDLS_TEARDOWN_BSS_DISCONNECT,
curr_peer->peerMac);
status = QDF_STATUS_SUCCESS;
@@ -3945,7 +3945,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
wlan_hdd_tdls_indicate_teardown
(pHddTdlsCtx->pAdapter, curr_peer,
- reason);
+ reason, true);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_BSS_DISCONNECT,
curr_peer->peerMac);
@@ -3992,7 +3992,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
wlan_hdd_tdls_indicate_teardown
(pHddTdlsCtx->pAdapter, curr_peer,
- reason);
+ reason, true);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_BSS_DISCONNECT,
curr_peer->peerMac);
diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c
index 8084474e275c..bfc0e4ab0d7a 100644
--- a/core/hdd/src/wlan_hdd_tdls.c
+++ b/core/hdd/src/wlan_hdd_tdls.c
@@ -270,7 +270,8 @@ void wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx)
wlan_hdd_tdls_indicate_teardown(
curr_peer->pHddTdlsCtx->pAdapter,
curr_peer,
- eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
+ eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON,
+ true);
hdd_send_wlan_tdls_teardown_event(eTDLS_TEARDOWN_CONCURRENCY,
curr_peer->peerMac);
}
@@ -2991,7 +2992,8 @@ int wlan_hdd_tdls_scan_callback(hdd_adapter_t *pAdapter, struct wiphy *wiphy,
wlan_hdd_tdls_indicate_teardown
(connectedPeerList[i]->pHddTdlsCtx->
pAdapter, connectedPeerList[i],
- eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
+ eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON,
+ true);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_SCAN,
connectedPeerList[i]->peerMac);
@@ -3095,11 +3097,13 @@ void wlan_hdd_tdls_timer_restart(hdd_adapter_t *pAdapter,
* @pAdapter: HDD adapter
* @curr_peer: peer tdls teardown happened
* @reason: teardown reason
+ * @need_lock: mutex lock for wlan_hdd_tdls_set_peer_link_status()
*
* Return: Void
*/
void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter,
- hddTdlsPeer_t *curr_peer, uint16_t reason)
+ hddTdlsPeer_t *curr_peer, uint16_t reason,
+ bool need_lock)
{
if ((NULL == pAdapter || WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) ||
(NULL == curr_peer)) {
@@ -3115,7 +3119,7 @@ void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter,
wlan_hdd_tdls_set_peer_link_status(curr_peer,
eTDLS_LINK_TEARING,
eTDLS_LINK_UNSPECIFIED,
- true);
+ need_lock);
hdd_info("Teardown reason %d", reason);
cfg80211_tdls_oper_request(pAdapter->dev,
curr_peer->peerMac,
@@ -4613,7 +4617,8 @@ int wlan_hdd_tdls_extctrl_deconfig_peer(hdd_adapter_t *pAdapter,
return -EINVAL;
} else {
wlan_hdd_tdls_indicate_teardown(pAdapter, pTdlsPeer,
- eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
+ eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON,
+ true);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_EXT_CTRL,
pTdlsPeer->peerMac);
@@ -5719,8 +5724,9 @@ static void wlan_hdd_tdls_idle_handler(void *user_data)
hdd_info("trigger tdls link to "MAC_ADDRESS_STR
" down", MAC_ADDR_ARRAY(curr_peer->peerMac));
wlan_hdd_tdls_indicate_teardown(curr_peer->pHddTdlsCtx->pAdapter,
- curr_peer,
- eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
+ curr_peer,
+ eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON,
+ true);
}
error_idle_return:
return;
@@ -5781,8 +5787,9 @@ static void tdls_ct_process_connected_link(hddTdlsPeer_t *curr_peer,
/* unlock the mutex here, it may used in caller function */
mutex_unlock(&hdd_ctx->tdls_lock);
wlan_hdd_tdls_indicate_teardown(hdd_tdls_ctx->pAdapter,
- curr_peer,
- eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
+ curr_peer,
+ eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON,
+ true);
mutex_lock(&hdd_ctx->tdls_lock);
return;
}
@@ -6092,7 +6099,8 @@ static int wlan_hdd_tdls_teardown_links(hdd_context_t *hddctx,
wlan_hdd_tdls_indicate_teardown(
curr_peer->pHddTdlsCtx->pAdapter,
curr_peer,
- eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
+ eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON,
+ true);
mutex_lock(&hddctx->tdls_lock);
hddctx->tdls_teardown_peers_cnt++;
mutex_unlock(&hddctx->tdls_lock);