summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Kondabattini <ganeshk@codeaurora.org>2016-12-26 20:07:33 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2017-01-06 20:49:22 -0800
commit6eaf89ec1b2bd72551bb13a8975b4bd3f7d3a39c (patch)
treee29736e41fc877633056d01b90b3336504ab9632
parentbb9b5d072481a64e3a25af00a7c0aabc8f4a5f18 (diff)
qcacld-3.0: move the ct_peer_mac_table to hdd ctx
Access to tdls_ctx should be protected with mutex since it is being accessed and freed in different contexts. ct_peer_mac_table is a parameter of tdls_ctx and it is being accessed in tx/rx path which runs in softirq context. So we cannot hold the mutex while accessing the tdls_ctx in tx/rx path. In this change the ct_peer_mac_table is moved to hdd_ctx so that we no need access the tdls_ctx in tx/rx path. CRs-Fixed: 1105539 Change-Id: Iafcc450a6e34500929605a11274fb2077b3f81fe
-rw-r--r--core/hdd/inc/wlan_hdd_main.h4
-rw-r--r--core/hdd/inc/wlan_hdd_tdls.h4
-rw-r--r--core/hdd/src/wlan_hdd_tdls.c43
3 files changed, 25 insertions, 26 deletions
diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h
index 66e274ffea44..1da0371e9aeb 100644
--- a/core/hdd/inc/wlan_hdd_main.h
+++ b/core/hdd/inc/wlan_hdd_main.h
@@ -1374,6 +1374,10 @@ struct hdd_context_s {
tdls_scan_context_t tdls_scan_ctxt;
/* Lock to avoid race condition during TDLS operations */
qdf_spinlock_t tdls_ct_spinlock;
+ /*linear mac address table for counting the packets*/
+ struct tdls_ct_mac_table ct_peer_mac_table[TDLS_CT_MAC_MAX_TABLE_SIZE];
+ /*number of valid mac entry in @ct_peer_mac_table*/
+ uint8_t valid_mac_entries;
struct mutex tdls_lock;
uint8_t tdls_off_channel;
uint16_t tdls_channel_offset;
diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h
index c3ff8318a1e7..1d589cf5b3a6 100644
--- a/core/hdd/inc/wlan_hdd_tdls.h
+++ b/core/hdd/inc/wlan_hdd_tdls.h
@@ -365,8 +365,6 @@ struct tdls_set_state_info {
* @discovery_sent_cnt: discovery sent count
* @ap_rssi: ap rssi
* @curr_candidate: current candidate
- * @ct_peer_mac_table: linear mac address table for counting the packets
- * @valid_mac_entries: number of valid mac entry in @ct_peer_mac_table
* @magic: magic
*
*/
@@ -380,8 +378,6 @@ typedef struct {
uint32_t discovery_sent_cnt;
int8_t ap_rssi;
struct _hddTdlsPeer_t *curr_candidate;
- struct tdls_ct_mac_table ct_peer_mac_table[TDLS_CT_MAC_MAX_TABLE_SIZE];
- uint8_t valid_mac_entries;
uint32_t magic;
} tdlsCtx_t;
diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c
index 69dace4c2e94..a044675a3da6 100644
--- a/core/hdd/src/wlan_hdd_tdls.c
+++ b/core/hdd/src/wlan_hdd_tdls.c
@@ -771,7 +771,7 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter)
pHddTdlsCtx->curr_candidate = NULL;
pHddTdlsCtx->magic = 0;
- pHddTdlsCtx->valid_mac_entries = 0;
+ pHddCtx->valid_mac_entries = 0;
/* remember configuration even if it is not used right now. it could be used later */
pHddTdlsCtx->threshold_config.tx_period_t =
@@ -5200,20 +5200,20 @@ static void wlan_hdd_tdls_ct_sampling_tx_rx(hdd_adapter_t *adapter,
qdf_spin_lock_bh(&hdd_ctx->tdls_ct_spinlock);
- if (0 == tdls_ctx->valid_mac_entries) {
+ if (0 == hdd_ctx->valid_mac_entries) {
qdf_spin_unlock_bh(&hdd_ctx->tdls_ct_spinlock);
return;
}
- valid_mac_entries = tdls_ctx->valid_mac_entries;
+ valid_mac_entries = hdd_ctx->valid_mac_entries;
- memcpy(ct_peer_mac_table, tdls_ctx->ct_peer_mac_table,
+ memcpy(ct_peer_mac_table, hdd_ctx->ct_peer_mac_table,
(sizeof(struct tdls_ct_mac_table)) * valid_mac_entries);
- memset(tdls_ctx->ct_peer_mac_table, 0,
+ memset(hdd_ctx->ct_peer_mac_table, 0,
(sizeof(struct tdls_ct_mac_table)) * valid_mac_entries);
- tdls_ctx->valid_mac_entries = 0;
+ hdd_ctx->valid_mac_entries = 0;
qdf_spin_unlock_bh(&hdd_ctx->tdls_ct_spinlock);
@@ -5250,7 +5250,6 @@ void wlan_hdd_tdls_update_rx_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;
@@ -5269,15 +5268,14 @@ void wlan_hdd_tdls_update_rx_pkt_cnt(hdd_adapter_t *adapter,
mac_addr, QDF_MAC_ADDR_SIZE) == 0)
return;
- tdls_ctx = adapter->sessionCtx.station.pHddTdlsCtx;
qdf_spin_lock_bh(&hdd_ctx->tdls_ct_spinlock);
- valid_mac_entries = tdls_ctx->valid_mac_entries;
+ valid_mac_entries = hdd_ctx->valid_mac_entries;
for (mac_cnt = 0; mac_cnt < valid_mac_entries; mac_cnt++) {
- if (memcmp(tdls_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
+ if (memcmp(hdd_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
mac_addr, QDF_MAC_ADDR_SIZE) == 0) {
- tdls_ctx->ct_peer_mac_table[mac_cnt].rx_packet_cnt++;
+ hdd_ctx->ct_peer_mac_table[mac_cnt].rx_packet_cnt++;
goto rx_cnt_return;
}
}
@@ -5286,10 +5284,10 @@ void wlan_hdd_tdls_update_rx_pkt_cnt(hdd_adapter_t *adapter,
* stop tracking till the old entries are removed
*/
if (mac_cnt < TDLS_CT_MAC_MAX_TABLE_SIZE) {
- memcpy(tdls_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
+ memcpy(hdd_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
mac_addr, QDF_MAC_ADDR_SIZE);
- tdls_ctx->valid_mac_entries = mac_cnt+1;
- tdls_ctx->ct_peer_mac_table[mac_cnt].rx_packet_cnt = 1;
+ hdd_ctx->valid_mac_entries = mac_cnt+1;
+ hdd_ctx->ct_peer_mac_table[mac_cnt].rx_packet_cnt = 1;
}
rx_cnt_return:
@@ -5339,12 +5337,12 @@ void wlan_hdd_tdls_update_tx_pkt_cnt(hdd_adapter_t *adapter,
tdls_ctx = adapter->sessionCtx.station.pHddTdlsCtx;
qdf_spin_lock_bh(&hdd_ctx->tdls_ct_spinlock);
- valid_mac_entries = tdls_ctx->valid_mac_entries;
+ valid_mac_entries = hdd_ctx->valid_mac_entries;
for (mac_cnt = 0; mac_cnt < valid_mac_entries; mac_cnt++) {
- if (memcmp(tdls_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
+ if (memcmp(hdd_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
mac_addr, QDF_MAC_ADDR_SIZE) == 0) {
- tdls_ctx->ct_peer_mac_table[mac_cnt].tx_packet_cnt++;
+ hdd_ctx->ct_peer_mac_table[mac_cnt].tx_packet_cnt++;
goto tx_cnt_return;
}
}
@@ -5353,10 +5351,10 @@ void wlan_hdd_tdls_update_tx_pkt_cnt(hdd_adapter_t *adapter,
* stop tracking till the old entries are removed
*/
if (mac_cnt < TDLS_CT_MAC_MAX_TABLE_SIZE) {
- memcpy(tdls_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
+ memcpy(hdd_ctx->ct_peer_mac_table[mac_cnt].mac_address.bytes,
mac_addr, QDF_MAC_ADDR_SIZE);
- tdls_ctx->ct_peer_mac_table[mac_cnt].tx_packet_cnt = 1;
- tdls_ctx->valid_mac_entries++;
+ hdd_ctx->ct_peer_mac_table[mac_cnt].tx_packet_cnt = 1;
+ hdd_ctx->valid_mac_entries++;
}
tx_cnt_return:
@@ -5788,6 +5786,7 @@ 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) {
@@ -5799,7 +5798,7 @@ static void wlan_hdd_tdls_ct_handler(void *user_data)
if (!hdd_ctx->enable_tdls_connection_tracker)
goto restart_return;
- mutex_lock(&hdd_ctx->tdls_lock);
+
/* Update tx rx traffic sample in tdls data structures */
wlan_hdd_tdls_ct_sampling_tx_rx(adapter, hdd_ctx,
@@ -5816,12 +5815,12 @@ static void wlan_hdd_tdls_ct_handler(void *user_data)
}
}
- mutex_unlock(&hdd_ctx->tdls_lock);
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);
+ mutex_unlock(&hdd_ctx->tdls_lock);
}
/**