TDLS: replace mutex_lock_interruptible with mutex_lock for tdls lock
Use mutex_lock instead of mutex_lock_interruptible to avoid race
condition which can occur due to interrupts.
Change-Id: I9ba790926e0b9467e7d2fc2aae0e1d5169231045
CRs-Fixed: 637112
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 078177f..7737547 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -2957,12 +2957,7 @@
* protect the concurrent access for the Adapters by TDLS
* module.
*/
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return -EINVAL;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
#endif
//De-init the adapter.
hdd_stop_adapter( pHddCtx, pAdapter );
@@ -3094,12 +3089,7 @@
* protect the concurrent access for the Adapters by TDLS
* module.
*/
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return -EINVAL;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
#endif
hdd_stop_adapter( pHddCtx, pAdapter );
hdd_deinit_adapter( pHddCtx, pAdapter );
@@ -3222,6 +3212,7 @@
VOS_STATUS status;
hddTdlsPeer_t *pTdlsPeer;
long ret;
+ tANI_U16 numCurrTdlsPeers;
ENTER();
@@ -3296,12 +3287,15 @@
/* first to check if we reached to maximum supported TDLS peer.
TODO: for now, return -EPERM looks working fine,
but need to check if any other errno fit into this category.*/
- if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers(pAdapter))
+ numCurrTdlsPeers = wlan_hdd_tdlsConnectedPeers(pAdapter);
+ if (HDD_MAX_NUM_TDLS_STA <= numCurrTdlsPeers)
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: " MAC_ADDRESS_STR
- " TDLS Max peer already connected. Request declined.",
- __func__, MAC_ADDR_ARRAY(mac));
+ " TDLS Max peer already connected. Request declined."
+ " Num of peers (%d), Max allowed (%d).",
+ __func__, MAC_ADDR_ARRAY(mac), numCurrTdlsPeers,
+ HDD_MAX_NUM_TDLS_STA);
goto error;
}
else
@@ -8711,6 +8705,7 @@
#if !(TDLS_MGMT_VERSION2)
u32 peer_capability = 0;
#endif
+ tANI_U16 numCurrTdlsPeers;
MTRACE(vos_trace(VOS_MODULE_ID_HDD,
TRACE_CODE_HDD_CFG80211_TDLS_MGMT,
@@ -8769,7 +8764,8 @@
if (SIR_MAC_TDLS_SETUP_REQ == action_code ||
SIR_MAC_TDLS_SETUP_RSP == action_code )
{
- if (HDD_MAX_NUM_TDLS_STA <= wlan_hdd_tdlsConnectedPeers(pAdapter))
+ numCurrTdlsPeers = wlan_hdd_tdlsConnectedPeers(pAdapter);
+ if (HDD_MAX_NUM_TDLS_STA <= numCurrTdlsPeers)
{
/* supplicant still sends tdls_mgmt(SETUP_REQ) even after
we return error code at 'add_station()'. Hence we have this
@@ -8779,8 +8775,9 @@
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: " MAC_ADDRESS_STR
- " TDLS Max peer already connected. action %d declined.",
- __func__, MAC_ADDR_ARRAY(peer), action_code);
+ " TDLS Max peer already connected. action (%d) declined. Num of peers (%d), Max allowed (%d).",
+ __func__, MAC_ADDR_ARRAY(peer), action_code,
+ numCurrTdlsPeers, HDD_MAX_NUM_TDLS_STA);
return -EINVAL;
}
else
@@ -8790,8 +8787,9 @@
status_code = eSIR_MAC_UNSPEC_FAILURE_STATUS;
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: " MAC_ADDRESS_STR
- " TDLS Max peer already connected send response status %d",
- __func__, MAC_ADDR_ARRAY(peer), status_code);
+ " TDLS Max peer already connected, send response status (%d). Num of peers (%d), Max allowed (%d).",
+ __func__, MAC_ADDR_ARRAY(peer), status_code,
+ numCurrTdlsPeers, HDD_MAX_NUM_TDLS_STA);
max_sta_failed = -EPERM;
/* fall through to send setup resp with failure status
code */
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 525bb66..1e24dbf 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -5960,12 +5960,7 @@
/* A Mutex Lock is introduced while changing/initializing the mode to
* protect the concurrent access for the Adapters by TDLS module.
*/
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return NULL;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
#endif
pAdapter->wdev.iftype = (session_type == WLAN_HDD_P2P_CLIENT) ?
@@ -6204,12 +6199,7 @@
/* A Mutex Lock is introduced while changing/initializing the mode to
* protect the concurrent access for the Adapters by TDLS module.
*/
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return VOS_STATUS_E_FAILURE;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
#endif
hdd_remove_adapter( pHddCtx, pAdapterNode );
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 2a24cce..6807f9a 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -110,12 +110,7 @@
if ( mutexLock )
{
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
}
pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter);
@@ -163,12 +158,7 @@
return;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter);
@@ -288,12 +278,7 @@
return;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
for (i = 0; i < 256; i++) {
head = &pHddTdlsCtx->peer_list[i];
@@ -477,12 +462,7 @@
curr_peer->rx_pkt,
curr_peer->pHddTdlsCtx->threshold_config.idle_packet_n);
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
/* Check tx/rx statistics on this tdls link for recent activities and
* then decide whether to tear down the link or keep it.
@@ -536,12 +516,7 @@
return;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return ;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
for (i = 0; i < 256; i++) {
head = &pHddTdlsCtx->peer_list[i];
@@ -652,12 +627,7 @@
if (NULL == pHddCtx)
return -1;
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return -1;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
if ((FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport) ||
(FALSE == sme_IsFeatureSupportedByFW(TDLS)))
@@ -937,13 +907,8 @@
return NULL;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- vos_mem_free(peer);
- return NULL;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
+
pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
if (NULL == pHddTdlsCtx)
@@ -1066,12 +1031,7 @@
if (pHddTdlsCtx->discovery_sent_cnt)
pHddTdlsCtx->discovery_sent_cnt--;
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return -1;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
wlan_hdd_tdls_check_power_save_prohibited(pAdapter);
@@ -1439,12 +1399,8 @@
if ((NULL == pHddCtx)) return -1;
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return -1;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
+
curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, FALSE);
if (curr_peer == NULL)
goto error;
@@ -1479,12 +1435,7 @@
if ( mutexLock )
{
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return NULL;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
}
pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
if (NULL == pHddTdlsCtx)
@@ -1521,12 +1472,7 @@
hddTdlsPeer_t *curr_peer= NULL;
VOS_STATUS status = 0;
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return NULL;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode );
while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status )
{
@@ -1681,12 +1627,7 @@
buf += len;
buflen -= len;
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return init_len-buflen;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
if (NULL == pHddTdlsCtx) {
mutex_unlock(&pHddCtx->tdls_lock);
@@ -1728,12 +1669,7 @@
return;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
"%s, update %d discover %d", __func__,
@@ -1773,12 +1709,7 @@
VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,"%s", __func__);
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
if (NULL == pHddTdlsCtx)
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
@@ -1815,12 +1746,7 @@
return;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
pHddCtx->connected_peer_count++;
wlan_hdd_tdls_check_power_save_prohibited(pAdapter);
@@ -1842,12 +1768,7 @@
return;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("unable to lock list"));
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
if (pHddCtx->connected_peer_count)
pHddCtx->connected_peer_count--;
@@ -1971,12 +1892,7 @@
hddTdlsPeer_t *curr_peer= NULL;
VOS_STATUS status = 0;
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return NULL;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode );
while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status )
@@ -2041,12 +1957,7 @@
return;
}
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
if (pHddCtx->tdls_mode == tdls_mode)
{
@@ -2159,12 +2070,7 @@
pHddTdlsCtx->discovery_sent_cnt++;
- if (mutex_lock_interruptible(&pHddCtx->tdls_lock))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: unable to lock list", __func__);
- return;
- }
+ mutex_lock(&pHddCtx->tdls_lock);
wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter);