Commit 8a7f9fd8 authored by Brian Norris's avatar Brian Norris Committed by Kalle Valo

mwifiex: don't disable hardirqs; just softirqs

main_proc_lock and int_lock (in mwifiex_adapter) are the only spinlocks
used in hardirq contexts. The rest are only in task or softirq contexts.

Convert every other lock from *_irq{save,restore}() variants to _bh()
variants.

This is a mechanical transformation of all spinlock usage in mwifiex
using the following:

Step 1:
I ran this nasty sed script:

    sed -i -E '/spin_lock_irqsave|spin_unlock_irqrestore/ {
      /main_proc_lock|int_lock/! {
        s:(spin_(un|)lock)_irq(save|restore):\1_bh: ;
        # Join broken lines.
        :a /;$/! {
          N;
          s/\s*\n\s*//;
          ba
        }
        /,.*\);$/ s:,.*\):\):
      }
    }' drivers/net/wireless/marvell/mwifiex/*

Step 2:
Manually delete the flags / ra_list_flags args from:

  mwifiex_send_single_packet()
  mwifiex_11n_aggregate_pkt()
  mwifiex_send_processed_packet()

which are now unused.

Step 3:
Apply this semantic patch (coccinelle) to remove the unused 'flags'
variables:

// <smpl>
@@
type T;
identifier i;
@@

(
extern T i;
|
- T i;
  ... when != i
)
// </smpl>

(Usage is something like this:

  make coccicheck COCCI=./patch.cocci MODE=patch M=drivers/net/wireless/marvell/mwifiex/

although this skips *.h files for some reasons, so I had to massage
stuff.)

Testing: I've played with a variety of stress tests, including download
stress tests on the same APs which caught regressions with commit
5188d545 ("mwifiex: restructure rx_reorder_tbl_lock usage"). I've
primarily tested on Marvell 8997 / PCIe, although I've given 8897 / SDIO
a quick spin as well.
Signed-off-by: default avatarBrian Norris <briannorris@chromium.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent ce2e942e
...@@ -84,17 +84,15 @@ mwifiex_get_ba_status(struct mwifiex_private *priv, ...@@ -84,17 +84,15 @@ mwifiex_get_ba_status(struct mwifiex_private *priv,
enum mwifiex_ba_status ba_status) enum mwifiex_ba_status ba_status)
{ {
struct mwifiex_tx_ba_stream_tbl *tx_ba_tsr_tbl; struct mwifiex_tx_ba_stream_tbl *tx_ba_tsr_tbl;
unsigned long flags;
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
list_for_each_entry(tx_ba_tsr_tbl, &priv->tx_ba_stream_tbl_ptr, list) { list_for_each_entry(tx_ba_tsr_tbl, &priv->tx_ba_stream_tbl_ptr, list) {
if (tx_ba_tsr_tbl->ba_status == ba_status) { if (tx_ba_tsr_tbl->ba_status == ba_status) {
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
flags);
return tx_ba_tsr_tbl; return tx_ba_tsr_tbl;
} }
} }
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
return NULL; return NULL;
} }
...@@ -516,13 +514,12 @@ void mwifiex_11n_delete_all_tx_ba_stream_tbl(struct mwifiex_private *priv) ...@@ -516,13 +514,12 @@ void mwifiex_11n_delete_all_tx_ba_stream_tbl(struct mwifiex_private *priv)
{ {
int i; int i;
struct mwifiex_tx_ba_stream_tbl *del_tbl_ptr, *tmp_node; struct mwifiex_tx_ba_stream_tbl *del_tbl_ptr, *tmp_node;
unsigned long flags;
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
list_for_each_entry_safe(del_tbl_ptr, tmp_node, list_for_each_entry_safe(del_tbl_ptr, tmp_node,
&priv->tx_ba_stream_tbl_ptr, list) &priv->tx_ba_stream_tbl_ptr, list)
mwifiex_11n_delete_tx_ba_stream_tbl_entry(priv, del_tbl_ptr); mwifiex_11n_delete_tx_ba_stream_tbl_entry(priv, del_tbl_ptr);
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
INIT_LIST_HEAD(&priv->tx_ba_stream_tbl_ptr); INIT_LIST_HEAD(&priv->tx_ba_stream_tbl_ptr);
...@@ -539,18 +536,16 @@ struct mwifiex_tx_ba_stream_tbl * ...@@ -539,18 +536,16 @@ struct mwifiex_tx_ba_stream_tbl *
mwifiex_get_ba_tbl(struct mwifiex_private *priv, int tid, u8 *ra) mwifiex_get_ba_tbl(struct mwifiex_private *priv, int tid, u8 *ra)
{ {
struct mwifiex_tx_ba_stream_tbl *tx_ba_tsr_tbl; struct mwifiex_tx_ba_stream_tbl *tx_ba_tsr_tbl;
unsigned long flags;
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
list_for_each_entry(tx_ba_tsr_tbl, &priv->tx_ba_stream_tbl_ptr, list) { list_for_each_entry(tx_ba_tsr_tbl, &priv->tx_ba_stream_tbl_ptr, list) {
if (ether_addr_equal_unaligned(tx_ba_tsr_tbl->ra, ra) && if (ether_addr_equal_unaligned(tx_ba_tsr_tbl->ra, ra) &&
tx_ba_tsr_tbl->tid == tid) { tx_ba_tsr_tbl->tid == tid) {
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
flags);
return tx_ba_tsr_tbl; return tx_ba_tsr_tbl;
} }
} }
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
return NULL; return NULL;
} }
...@@ -563,7 +558,6 @@ void mwifiex_create_ba_tbl(struct mwifiex_private *priv, u8 *ra, int tid, ...@@ -563,7 +558,6 @@ void mwifiex_create_ba_tbl(struct mwifiex_private *priv, u8 *ra, int tid,
{ {
struct mwifiex_tx_ba_stream_tbl *new_node; struct mwifiex_tx_ba_stream_tbl *new_node;
struct mwifiex_ra_list_tbl *ra_list; struct mwifiex_ra_list_tbl *ra_list;
unsigned long flags;
int tid_down; int tid_down;
if (!mwifiex_get_ba_tbl(priv, tid, ra)) { if (!mwifiex_get_ba_tbl(priv, tid, ra)) {
...@@ -584,9 +578,9 @@ void mwifiex_create_ba_tbl(struct mwifiex_private *priv, u8 *ra, int tid, ...@@ -584,9 +578,9 @@ void mwifiex_create_ba_tbl(struct mwifiex_private *priv, u8 *ra, int tid,
new_node->ba_status = ba_status; new_node->ba_status = ba_status;
memcpy(new_node->ra, ra, ETH_ALEN); memcpy(new_node->ra, ra, ETH_ALEN);
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
list_add_tail(&new_node->list, &priv->tx_ba_stream_tbl_ptr); list_add_tail(&new_node->list, &priv->tx_ba_stream_tbl_ptr);
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
} }
} }
...@@ -599,7 +593,6 @@ int mwifiex_send_addba(struct mwifiex_private *priv, int tid, u8 *peer_mac) ...@@ -599,7 +593,6 @@ int mwifiex_send_addba(struct mwifiex_private *priv, int tid, u8 *peer_mac)
u32 tx_win_size = priv->add_ba_param.tx_win_size; u32 tx_win_size = priv->add_ba_param.tx_win_size;
static u8 dialog_tok; static u8 dialog_tok;
int ret; int ret;
unsigned long flags;
u16 block_ack_param_set; u16 block_ack_param_set;
mwifiex_dbg(priv->adapter, CMD, "cmd: %s: tid %d\n", __func__, tid); mwifiex_dbg(priv->adapter, CMD, "cmd: %s: tid %d\n", __func__, tid);
...@@ -612,10 +605,10 @@ int mwifiex_send_addba(struct mwifiex_private *priv, int tid, u8 *peer_mac) ...@@ -612,10 +605,10 @@ int mwifiex_send_addba(struct mwifiex_private *priv, int tid, u8 *peer_mac)
memcmp(priv->cfg_bssid, peer_mac, ETH_ALEN)) { memcmp(priv->cfg_bssid, peer_mac, ETH_ALEN)) {
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
sta_ptr = mwifiex_get_sta_entry(priv, peer_mac); sta_ptr = mwifiex_get_sta_entry(priv, peer_mac);
if (!sta_ptr) { if (!sta_ptr) {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
mwifiex_dbg(priv->adapter, ERROR, mwifiex_dbg(priv->adapter, ERROR,
"BA setup with unknown TDLS peer %pM!\n", "BA setup with unknown TDLS peer %pM!\n",
peer_mac); peer_mac);
...@@ -623,7 +616,7 @@ int mwifiex_send_addba(struct mwifiex_private *priv, int tid, u8 *peer_mac) ...@@ -623,7 +616,7 @@ int mwifiex_send_addba(struct mwifiex_private *priv, int tid, u8 *peer_mac)
} }
if (sta_ptr->is_11ac_enabled) if (sta_ptr->is_11ac_enabled)
tx_win_size = MWIFIEX_11AC_STA_AMPDU_DEF_TXWINSIZE; tx_win_size = MWIFIEX_11AC_STA_AMPDU_DEF_TXWINSIZE;
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
} }
block_ack_param_set = (u16)((tid << BLOCKACKPARAM_TID_POS) | block_ack_param_set = (u16)((tid << BLOCKACKPARAM_TID_POS) |
...@@ -687,9 +680,8 @@ int mwifiex_send_delba(struct mwifiex_private *priv, int tid, u8 *peer_mac, ...@@ -687,9 +680,8 @@ int mwifiex_send_delba(struct mwifiex_private *priv, int tid, u8 *peer_mac,
void mwifiex_11n_delba(struct mwifiex_private *priv, int tid) void mwifiex_11n_delba(struct mwifiex_private *priv, int tid)
{ {
struct mwifiex_rx_reorder_tbl *rx_reor_tbl_ptr; struct mwifiex_rx_reorder_tbl *rx_reor_tbl_ptr;
unsigned long flags;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_for_each_entry(rx_reor_tbl_ptr, &priv->rx_reorder_tbl_ptr, list) { list_for_each_entry(rx_reor_tbl_ptr, &priv->rx_reorder_tbl_ptr, list) {
if (rx_reor_tbl_ptr->tid == tid) { if (rx_reor_tbl_ptr->tid == tid) {
dev_dbg(priv->adapter->dev, dev_dbg(priv->adapter->dev,
...@@ -700,7 +692,7 @@ void mwifiex_11n_delba(struct mwifiex_private *priv, int tid) ...@@ -700,7 +692,7 @@ void mwifiex_11n_delba(struct mwifiex_private *priv, int tid)
} }
} }
exit: exit:
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
} }
/* /*
...@@ -729,9 +721,8 @@ int mwifiex_get_rx_reorder_tbl(struct mwifiex_private *priv, ...@@ -729,9 +721,8 @@ int mwifiex_get_rx_reorder_tbl(struct mwifiex_private *priv,
struct mwifiex_ds_rx_reorder_tbl *rx_reo_tbl = buf; struct mwifiex_ds_rx_reorder_tbl *rx_reo_tbl = buf;
struct mwifiex_rx_reorder_tbl *rx_reorder_tbl_ptr; struct mwifiex_rx_reorder_tbl *rx_reorder_tbl_ptr;
int count = 0; int count = 0;
unsigned long flags;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_for_each_entry(rx_reorder_tbl_ptr, &priv->rx_reorder_tbl_ptr, list_for_each_entry(rx_reorder_tbl_ptr, &priv->rx_reorder_tbl_ptr,
list) { list) {
rx_reo_tbl->tid = (u16) rx_reorder_tbl_ptr->tid; rx_reo_tbl->tid = (u16) rx_reorder_tbl_ptr->tid;
...@@ -750,7 +741,7 @@ int mwifiex_get_rx_reorder_tbl(struct mwifiex_private *priv, ...@@ -750,7 +741,7 @@ int mwifiex_get_rx_reorder_tbl(struct mwifiex_private *priv,
if (count >= MWIFIEX_MAX_RX_BASTREAM_SUPPORTED) if (count >= MWIFIEX_MAX_RX_BASTREAM_SUPPORTED)
break; break;
} }
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
return count; return count;
} }
...@@ -764,9 +755,8 @@ int mwifiex_get_tx_ba_stream_tbl(struct mwifiex_private *priv, ...@@ -764,9 +755,8 @@ int mwifiex_get_tx_ba_stream_tbl(struct mwifiex_private *priv,
struct mwifiex_tx_ba_stream_tbl *tx_ba_tsr_tbl; struct mwifiex_tx_ba_stream_tbl *tx_ba_tsr_tbl;
struct mwifiex_ds_tx_ba_stream_tbl *rx_reo_tbl = buf; struct mwifiex_ds_tx_ba_stream_tbl *rx_reo_tbl = buf;
int count = 0; int count = 0;
unsigned long flags;
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
list_for_each_entry(tx_ba_tsr_tbl, &priv->tx_ba_stream_tbl_ptr, list) { list_for_each_entry(tx_ba_tsr_tbl, &priv->tx_ba_stream_tbl_ptr, list) {
rx_reo_tbl->tid = (u16) tx_ba_tsr_tbl->tid; rx_reo_tbl->tid = (u16) tx_ba_tsr_tbl->tid;
mwifiex_dbg(priv->adapter, DATA, "data: %s tid=%d\n", mwifiex_dbg(priv->adapter, DATA, "data: %s tid=%d\n",
...@@ -778,7 +768,7 @@ int mwifiex_get_tx_ba_stream_tbl(struct mwifiex_private *priv, ...@@ -778,7 +768,7 @@ int mwifiex_get_tx_ba_stream_tbl(struct mwifiex_private *priv,
if (count >= MWIFIEX_MAX_TX_BASTREAM_SUPPORTED) if (count >= MWIFIEX_MAX_TX_BASTREAM_SUPPORTED)
break; break;
} }
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
return count; return count;
} }
...@@ -790,16 +780,15 @@ int mwifiex_get_tx_ba_stream_tbl(struct mwifiex_private *priv, ...@@ -790,16 +780,15 @@ int mwifiex_get_tx_ba_stream_tbl(struct mwifiex_private *priv,
void mwifiex_del_tx_ba_stream_tbl_by_ra(struct mwifiex_private *priv, u8 *ra) void mwifiex_del_tx_ba_stream_tbl_by_ra(struct mwifiex_private *priv, u8 *ra)
{ {
struct mwifiex_tx_ba_stream_tbl *tbl, *tmp; struct mwifiex_tx_ba_stream_tbl *tbl, *tmp;
unsigned long flags;
if (!ra) if (!ra)
return; return;
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
list_for_each_entry_safe(tbl, tmp, &priv->tx_ba_stream_tbl_ptr, list) list_for_each_entry_safe(tbl, tmp, &priv->tx_ba_stream_tbl_ptr, list)
if (!memcmp(tbl->ra, ra, ETH_ALEN)) if (!memcmp(tbl->ra, ra, ETH_ALEN))
mwifiex_11n_delete_tx_ba_stream_tbl_entry(priv, tbl); mwifiex_11n_delete_tx_ba_stream_tbl_entry(priv, tbl);
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
return; return;
} }
......
...@@ -147,11 +147,10 @@ mwifiex_find_stream_to_delete(struct mwifiex_private *priv, int ptr_tid, ...@@ -147,11 +147,10 @@ mwifiex_find_stream_to_delete(struct mwifiex_private *priv, int ptr_tid,
int tid; int tid;
u8 ret = false; u8 ret = false;
struct mwifiex_tx_ba_stream_tbl *tx_tbl; struct mwifiex_tx_ba_stream_tbl *tx_tbl;
unsigned long flags;
tid = priv->aggr_prio_tbl[ptr_tid].ampdu_user; tid = priv->aggr_prio_tbl[ptr_tid].ampdu_user;
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
list_for_each_entry(tx_tbl, &priv->tx_ba_stream_tbl_ptr, list) { list_for_each_entry(tx_tbl, &priv->tx_ba_stream_tbl_ptr, list) {
if (tid > priv->aggr_prio_tbl[tx_tbl->tid].ampdu_user) { if (tid > priv->aggr_prio_tbl[tx_tbl->tid].ampdu_user) {
tid = priv->aggr_prio_tbl[tx_tbl->tid].ampdu_user; tid = priv->aggr_prio_tbl[tx_tbl->tid].ampdu_user;
...@@ -160,7 +159,7 @@ mwifiex_find_stream_to_delete(struct mwifiex_private *priv, int ptr_tid, ...@@ -160,7 +159,7 @@ mwifiex_find_stream_to_delete(struct mwifiex_private *priv, int ptr_tid,
ret = true; ret = true;
} }
} }
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
return ret; return ret;
} }
......
...@@ -155,7 +155,7 @@ mwifiex_11n_form_amsdu_txpd(struct mwifiex_private *priv, ...@@ -155,7 +155,7 @@ mwifiex_11n_form_amsdu_txpd(struct mwifiex_private *priv,
int int
mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
struct mwifiex_ra_list_tbl *pra_list, struct mwifiex_ra_list_tbl *pra_list,
int ptrindex, unsigned long ra_list_flags) int ptrindex)
__releases(&priv->wmm.ra_list_spinlock) __releases(&priv->wmm.ra_list_spinlock)
{ {
struct mwifiex_adapter *adapter = priv->adapter; struct mwifiex_adapter *adapter = priv->adapter;
...@@ -168,8 +168,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, ...@@ -168,8 +168,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
skb_src = skb_peek(&pra_list->skb_head); skb_src = skb_peek(&pra_list->skb_head);
if (!skb_src) { if (!skb_src) {
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
ra_list_flags);
return 0; return 0;
} }
...@@ -177,8 +176,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, ...@@ -177,8 +176,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
skb_aggr = mwifiex_alloc_dma_align_buf(adapter->tx_buf_size, skb_aggr = mwifiex_alloc_dma_align_buf(adapter->tx_buf_size,
GFP_ATOMIC); GFP_ATOMIC);
if (!skb_aggr) { if (!skb_aggr) {
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
ra_list_flags);
return -1; return -1;
} }
...@@ -208,17 +206,15 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, ...@@ -208,17 +206,15 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
pra_list->total_pkt_count--; pra_list->total_pkt_count--;
atomic_dec(&priv->wmm.tx_pkts_queued); atomic_dec(&priv->wmm.tx_pkts_queued);
aggr_num++; aggr_num++;
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
ra_list_flags);
mwifiex_11n_form_amsdu_pkt(skb_aggr, skb_src, &pad); mwifiex_11n_form_amsdu_pkt(skb_aggr, skb_src, &pad);
mwifiex_write_data_complete(adapter, skb_src, 0, 0); mwifiex_write_data_complete(adapter, skb_src, 0, 0);
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, ra_list_flags); spin_lock_bh(&priv->wmm.ra_list_spinlock);
if (!mwifiex_is_ralist_valid(priv, pra_list, ptrindex)) { if (!mwifiex_is_ralist_valid(priv, pra_list, ptrindex)) {
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
ra_list_flags);
return -1; return -1;
} }
...@@ -232,7 +228,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, ...@@ -232,7 +228,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
} while (skb_src); } while (skb_src);
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, ra_list_flags); spin_unlock_bh(&priv->wmm.ra_list_spinlock);
/* Last AMSDU packet does not need padding */ /* Last AMSDU packet does not need padding */
skb_trim(skb_aggr, skb_aggr->len - pad); skb_trim(skb_aggr, skb_aggr->len - pad);
...@@ -265,10 +261,9 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, ...@@ -265,10 +261,9 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
} }
switch (ret) { switch (ret) {
case -EBUSY: case -EBUSY:
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, ra_list_flags); spin_lock_bh(&priv->wmm.ra_list_spinlock);
if (!mwifiex_is_ralist_valid(priv, pra_list, ptrindex)) { if (!mwifiex_is_ralist_valid(priv, pra_list, ptrindex)) {
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
ra_list_flags);
mwifiex_write_data_complete(adapter, skb_aggr, 1, -1); mwifiex_write_data_complete(adapter, skb_aggr, 1, -1);
return -1; return -1;
} }
...@@ -286,8 +281,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, ...@@ -286,8 +281,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
atomic_inc(&priv->wmm.tx_pkts_queued); atomic_inc(&priv->wmm.tx_pkts_queued);
tx_info_aggr->flags |= MWIFIEX_BUF_FLAG_REQUEUED_PKT; tx_info_aggr->flags |= MWIFIEX_BUF_FLAG_REQUEUED_PKT;
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
ra_list_flags);
mwifiex_dbg(adapter, ERROR, "data: -EBUSY is returned\n"); mwifiex_dbg(adapter, ERROR, "data: -EBUSY is returned\n");
break; break;
case -1: case -1:
......
...@@ -27,7 +27,7 @@ int mwifiex_11n_deaggregate_pkt(struct mwifiex_private *priv, ...@@ -27,7 +27,7 @@ int mwifiex_11n_deaggregate_pkt(struct mwifiex_private *priv,
struct sk_buff *skb); struct sk_buff *skb);
int mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, int mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
struct mwifiex_ra_list_tbl *ptr, struct mwifiex_ra_list_tbl *ptr,
int ptr_index, unsigned long flags) int ptr_index)
__releases(&priv->wmm.ra_list_spinlock); __releases(&priv->wmm.ra_list_spinlock);
#endif /* !_MWIFIEX_11N_AGGR_H_ */ #endif /* !_MWIFIEX_11N_AGGR_H_ */
...@@ -113,10 +113,9 @@ mwifiex_11n_dispatch_pkt_until_start_win(struct mwifiex_private *priv, ...@@ -113,10 +113,9 @@ mwifiex_11n_dispatch_pkt_until_start_win(struct mwifiex_private *priv,
struct sk_buff_head list; struct sk_buff_head list;
struct sk_buff *skb; struct sk_buff *skb;
int pkt_to_send, i; int pkt_to_send, i;
unsigned long flags;
__skb_queue_head_init(&list); __skb_queue_head_init(&list);
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
pkt_to_send = (start_win > tbl->start_win) ? pkt_to_send = (start_win > tbl->start_win) ?
min((start_win - tbl->start_win), tbl->win_size) : min((start_win - tbl->start_win), tbl->win_size) :
...@@ -140,7 +139,7 @@ mwifiex_11n_dispatch_pkt_until_start_win(struct mwifiex_private *priv, ...@@ -140,7 +139,7 @@ mwifiex_11n_dispatch_pkt_until_start_win(struct mwifiex_private *priv,
} }
tbl->start_win = start_win; tbl->start_win = start_win;
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
while ((skb = __skb_dequeue(&list))) while ((skb = __skb_dequeue(&list)))
mwifiex_11n_dispatch_pkt(priv, skb); mwifiex_11n_dispatch_pkt(priv, skb);
...@@ -161,10 +160,9 @@ mwifiex_11n_scan_and_dispatch(struct mwifiex_private *priv, ...@@ -161,10 +160,9 @@ mwifiex_11n_scan_and_dispatch(struct mwifiex_private *priv,
struct sk_buff_head list; struct sk_buff_head list;
struct sk_buff *skb; struct sk_buff *skb;
int i, j, xchg; int i, j, xchg;
unsigned long flags;
__skb_queue_head_init(&list); __skb_queue_head_init(&list);
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
for (i = 0; i < tbl->win_size; ++i) { for (i = 0; i < tbl->win_size; ++i) {
if (!tbl->rx_reorder_ptr[i]) if (!tbl->rx_reorder_ptr[i])
...@@ -187,7 +185,7 @@ mwifiex_11n_scan_and_dispatch(struct mwifiex_private *priv, ...@@ -187,7 +185,7 @@ mwifiex_11n_scan_and_dispatch(struct mwifiex_private *priv,
} }
tbl->start_win = (tbl->start_win + i) & (MAX_TID_VALUE - 1); tbl->start_win = (tbl->start_win + i) & (MAX_TID_VALUE - 1);
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
while ((skb = __skb_dequeue(&list))) while ((skb = __skb_dequeue(&list)))
mwifiex_11n_dispatch_pkt(priv, skb); mwifiex_11n_dispatch_pkt(priv, skb);
...@@ -203,19 +201,18 @@ static void ...@@ -203,19 +201,18 @@ static void
mwifiex_del_rx_reorder_entry(struct mwifiex_private *priv, mwifiex_del_rx_reorder_entry(struct mwifiex_private *priv,
struct mwifiex_rx_reorder_tbl *tbl) struct mwifiex_rx_reorder_tbl *tbl)
{ {
unsigned long flags;
int start_win; int start_win;
if (!tbl) if (!tbl)
return; return;
spin_lock_irqsave(&priv->adapter->rx_proc_lock, flags); spin_lock_bh(&priv->adapter->rx_proc_lock);
priv->adapter->rx_locked = true; priv->adapter->rx_locked = true;
if (priv->adapter->rx_processing) { if (priv->adapter->rx_processing) {
spin_unlock_irqrestore(&priv->adapter->rx_proc_lock, flags); spin_unlock_bh(&priv->adapter->rx_proc_lock);
flush_workqueue(priv->adapter->rx_workqueue); flush_workqueue(priv->adapter->rx_workqueue);
} else { } else {
spin_unlock_irqrestore(&priv->adapter->rx_proc_lock, flags); spin_unlock_bh(&priv->adapter->rx_proc_lock);
} }
start_win = (tbl->start_win + tbl->win_size) & (MAX_TID_VALUE - 1); start_win = (tbl->start_win + tbl->win_size) & (MAX_TID_VALUE - 1);
...@@ -224,16 +221,16 @@ mwifiex_del_rx_reorder_entry(struct mwifiex_private *priv, ...@@ -224,16 +221,16 @@ mwifiex_del_rx_reorder_entry(struct mwifiex_private *priv,
del_timer_sync(&tbl->timer_context.timer); del_timer_sync(&tbl->timer_context.timer);
tbl->timer_context.timer_is_set = false; tbl->timer_context.timer_is_set = false;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_del(&tbl->list); list_del(&tbl->list);
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
kfree(tbl->rx_reorder_ptr); kfree(tbl->rx_reorder_ptr);
kfree(tbl); kfree(tbl);
spin_lock_irqsave(&priv->adapter->rx_proc_lock, flags); spin_lock_bh(&priv->adapter->rx_proc_lock);
priv->adapter->rx_locked = false; priv->adapter->rx_locked = false;
spin_unlock_irqrestore(&priv->adapter->rx_proc_lock, flags); spin_unlock_bh(&priv->adapter->rx_proc_lock);
} }
...@@ -245,17 +242,15 @@ struct mwifiex_rx_reorder_tbl * ...@@ -245,17 +242,15 @@ struct mwifiex_rx_reorder_tbl *
mwifiex_11n_get_rx_reorder_tbl(struct mwifiex_private *priv, int tid, u8 *ta) mwifiex_11n_get_rx_reorder_tbl(struct mwifiex_private *priv, int tid, u8 *ta)
{ {
struct mwifiex_rx_reorder_tbl *tbl; struct mwifiex_rx_reorder_tbl *tbl;
unsigned long flags;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_for_each_entry(tbl, &priv->rx_reorder_tbl_ptr, list) { list_for_each_entry(tbl, &priv->rx_reorder_tbl_ptr, list) {
if (!memcmp(tbl->ta, ta, ETH_ALEN) && tbl->tid == tid) { if (!memcmp(tbl->ta, ta, ETH_ALEN) && tbl->tid == tid) {
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, spin_unlock_bh(&priv->rx_reorder_tbl_lock);
flags);
return tbl; return tbl;
} }
} }
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
return NULL; return NULL;
} }
...@@ -266,21 +261,19 @@ mwifiex_11n_get_rx_reorder_tbl(struct mwifiex_private *priv, int tid, u8 *ta) ...@@ -266,21 +261,19 @@ mwifiex_11n_get_rx_reorder_tbl(struct mwifiex_private *priv, int tid, u8 *ta)
void mwifiex_11n_del_rx_reorder_tbl_by_ta(struct mwifiex_private *priv, u8 *ta) void mwifiex_11n_del_rx_reorder_tbl_by_ta(struct mwifiex_private *priv, u8 *ta)
{ {
struct mwifiex_rx_reorder_tbl *tbl, *tmp; struct mwifiex_rx_reorder_tbl *tbl, *tmp;
unsigned long flags;
if (!ta) if (!ta)
return; return;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_for_each_entry_safe(tbl, tmp, &priv->rx_reorder_tbl_ptr, list) { list_for_each_entry_safe(tbl, tmp, &priv->rx_reorder_tbl_ptr, list) {
if (!memcmp(tbl->ta, ta, ETH_ALEN)) { if (!memcmp(tbl->ta, ta, ETH_ALEN)) {
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, spin_unlock_bh(&priv->rx_reorder_tbl_lock);
flags);
mwifiex_del_rx_reorder_entry(priv, tbl); mwifiex_del_rx_reorder_entry(priv, tbl);
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
} }
} }
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
return; return;
} }
...@@ -294,18 +287,16 @@ mwifiex_11n_find_last_seq_num(struct reorder_tmr_cnxt *ctx) ...@@ -294,18 +287,16 @@ mwifiex_11n_find_last_seq_num(struct reorder_tmr_cnxt *ctx)
{ {
struct mwifiex_rx_reorder_tbl *rx_reorder_tbl_ptr = ctx->ptr; struct mwifiex_rx_reorder_tbl *rx_reorder_tbl_ptr = ctx->ptr;
struct mwifiex_private *priv = ctx->priv; struct mwifiex_private *priv = ctx->priv;
unsigned long flags;
int i; int i;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
for (i = rx_reorder_tbl_ptr->win_size - 1; i >= 0; --i) { for (i = rx_reorder_tbl_ptr->win_size - 1; i >= 0; --i) {
if (rx_reorder_tbl_ptr->rx_reorder_ptr[i]) { if (rx_reorder_tbl_ptr->rx_reorder_ptr[i]) {
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, spin_unlock_bh(&priv->rx_reorder_tbl_lock);
flags);
return i; return i;
} }
} }
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
return -1; return -1;
} }
...@@ -353,7 +344,6 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta, ...@@ -353,7 +344,6 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
int i; int i;
struct mwifiex_rx_reorder_tbl *tbl, *new_node; struct mwifiex_rx_reorder_tbl *tbl, *new_node;
u16 last_seq = 0; u16 last_seq = 0;
unsigned long flags;
struct mwifiex_sta_node *node; struct mwifiex_sta_node *node;
/* /*
...@@ -377,7 +367,7 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta, ...@@ -377,7 +367,7 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
new_node->init_win = seq_num; new_node->init_win = seq_num;
new_node->flags = 0; new_node->flags = 0;
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
if (mwifiex_queuing_ra_based(priv)) { if (mwifiex_queuing_ra_based(priv)) {
if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP) { if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP) {
node = mwifiex_get_sta_entry(priv, ta); node = mwifiex_get_sta_entry(priv, ta);
...@@ -391,7 +381,7 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta, ...@@ -391,7 +381,7 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
else else
last_seq = priv->rx_seq[tid]; last_seq = priv->rx_seq[tid];
} }
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
mwifiex_dbg(priv->adapter, INFO, mwifiex_dbg(priv->adapter, INFO,
"info: last_seq=%d start_win=%d\n", "info: last_seq=%d start_win=%d\n",
...@@ -423,9 +413,9 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta, ...@@ -423,9 +413,9 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
for (i = 0; i < win_size; ++i) for (i = 0; i < win_size; ++i)
new_node->rx_reorder_ptr[i] = NULL; new_node->rx_reorder_ptr[i] = NULL;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_add_tail(&new_node->list, &priv->rx_reorder_tbl_ptr); list_add_tail(&new_node->list, &priv->rx_reorder_tbl_ptr);
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
} }
static void static void
...@@ -481,18 +471,17 @@ int mwifiex_cmd_11n_addba_rsp_gen(struct mwifiex_private *priv, ...@@ -481,18 +471,17 @@ int mwifiex_cmd_11n_addba_rsp_gen(struct mwifiex_private *priv,
u32 rx_win_size = priv->add_ba_param.rx_win_size; u32 rx_win_size = priv->add_ba_param.rx_win_size;
u8 tid; u8 tid;
int win_size; int win_size;
unsigned long flags;
uint16_t block_ack_param_set; uint16_t block_ack_param_set;
if ((GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA) && if ((GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA) &&
ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info) && ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info) &&
priv->adapter->is_hw_11ac_capable && priv->adapter->is_hw_11ac_capable &&
memcmp(priv->cfg_bssid, cmd_addba_req->peer_mac_addr, ETH_ALEN)) { memcmp(priv->cfg_bssid, cmd_addba_req->peer_mac_addr, ETH_ALEN)) {
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
sta_ptr = mwifiex_get_sta_entry(priv, sta_ptr = mwifiex_get_sta_entry(priv,
cmd_addba_req->peer_mac_addr); cmd_addba_req->peer_mac_addr);
if (!sta_ptr) { if (!sta_ptr) {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
mwifiex_dbg(priv->adapter, ERROR, mwifiex_dbg(priv->adapter, ERROR,
"BA setup with unknown TDLS peer %pM!\n", "BA setup with unknown TDLS peer %pM!\n",
cmd_addba_req->peer_mac_addr); cmd_addba_req->peer_mac_addr);
...@@ -500,7 +489,7 @@ int mwifiex_cmd_11n_addba_rsp_gen(struct mwifiex_private *priv, ...@@ -500,7 +489,7 @@ int mwifiex_cmd_11n_addba_rsp_gen(struct mwifiex_private *priv,
} }
if (sta_ptr->is_11ac_enabled) if (sta_ptr->is_11ac_enabled)
rx_win_size = MWIFIEX_11AC_STA_AMPDU_DEF_RXWINSIZE; rx_win_size = MWIFIEX_11AC_STA_AMPDU_DEF_RXWINSIZE;
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
} }
cmd->command = cpu_to_le16(HostCmd_CMD_11N_ADDBA_RSP); cmd->command = cpu_to_le16(HostCmd_CMD_11N_ADDBA_RSP);
...@@ -687,7 +676,6 @@ mwifiex_del_ba_tbl(struct mwifiex_private *priv, int tid, u8 *peer_mac, ...@@ -687,7 +676,6 @@ mwifiex_del_ba_tbl(struct mwifiex_private *priv, int tid, u8 *peer_mac,
struct mwifiex_tx_ba_stream_tbl *ptx_tbl; struct mwifiex_tx_ba_stream_tbl *ptx_tbl;
struct mwifiex_ra_list_tbl *ra_list; struct mwifiex_ra_list_tbl *ra_list;
u8 cleanup_rx_reorder_tbl; u8 cleanup_rx_reorder_tbl;
unsigned long flags;
int tid_down; int tid_down;
if (type == TYPE_DELBA_RECEIVE) if (type == TYPE_DELBA_RECEIVE)
...@@ -721,9 +709,9 @@ mwifiex_del_ba_tbl(struct mwifiex_private *priv, int tid, u8 *peer_mac, ...@@ -721,9 +709,9 @@ mwifiex_del_ba_tbl(struct mwifiex_private *priv, int tid, u8 *peer_mac,
ra_list->amsdu_in_ampdu = false; ra_list->amsdu_in_ampdu = false;
ra_list->ba_status = BA_SETUP_NONE; ra_list->ba_status = BA_SETUP_NONE;
} }
spin_lock_irqsave(&priv->tx_ba_stream_tbl_lock, flags); spin_lock_bh(&priv->tx_ba_stream_tbl_lock);
mwifiex_11n_delete_tx_ba_stream_tbl_entry(priv, ptx_tbl); mwifiex_11n_delete_tx_ba_stream_tbl_entry(priv, ptx_tbl);
spin_unlock_irqrestore(&priv->tx_ba_stream_tbl_lock, flags); spin_unlock_bh(&priv->tx_ba_stream_tbl_lock);
} }
} }
...@@ -809,17 +797,16 @@ void mwifiex_11n_ba_stream_timeout(struct mwifiex_private *priv, ...@@ -809,17 +797,16 @@ void mwifiex_11n_ba_stream_timeout(struct mwifiex_private *priv,
void mwifiex_11n_cleanup_reorder_tbl(struct mwifiex_private *priv) void mwifiex_11n_cleanup_reorder_tbl(struct mwifiex_private *priv)
{ {
struct mwifiex_rx_reorder_tbl *del_tbl_ptr, *tmp_node; struct mwifiex_rx_reorder_tbl *del_tbl_ptr, *tmp_node;
unsigned long flags;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_for_each_entry_safe(del_tbl_ptr, tmp_node, list_for_each_entry_safe(del_tbl_ptr, tmp_node,
&priv->rx_reorder_tbl_ptr, list) { &priv->rx_reorder_tbl_ptr, list) {
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
mwifiex_del_rx_reorder_entry(priv, del_tbl_ptr); mwifiex_del_rx_reorder_entry(priv, del_tbl_ptr);
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
} }
INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr); INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr);
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
mwifiex_reset_11n_rx_seq_num(priv); mwifiex_reset_11n_rx_seq_num(priv);
} }
...@@ -831,7 +818,6 @@ void mwifiex_update_rxreor_flags(struct mwifiex_adapter *adapter, u8 flags) ...@@ -831,7 +818,6 @@ void mwifiex_update_rxreor_flags(struct mwifiex_adapter *adapter, u8 flags)
{ {
struct mwifiex_private *priv; struct mwifiex_private *priv;
struct mwifiex_rx_reorder_tbl *tbl; struct mwifiex_rx_reorder_tbl *tbl;
unsigned long lock_flags;
int i; int i;
for (i = 0; i < adapter->priv_num; i++) { for (i = 0; i < adapter->priv_num; i++) {
...@@ -839,10 +825,10 @@ void mwifiex_update_rxreor_flags(struct mwifiex_adapter *adapter, u8 flags) ...@@ -839,10 +825,10 @@ void mwifiex_update_rxreor_flags(struct mwifiex_adapter *adapter, u8 flags)
if (!priv) if (!priv)
continue; continue;
spin_lock_irqsave(&priv->rx_reorder_tbl_lock, lock_flags); spin_lock_bh(&priv->rx_reorder_tbl_lock);
list_for_each_entry(tbl, &priv->rx_reorder_tbl_ptr, list) list_for_each_entry(tbl, &priv->rx_reorder_tbl_ptr, list)
tbl->flags = flags; tbl->flags = flags;
spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, lock_flags); spin_unlock_bh(&priv->rx_reorder_tbl_lock);
} }
return; return;
......
...@@ -876,13 +876,13 @@ static int mwifiex_deinit_priv_params(struct mwifiex_private *priv) ...@@ -876,13 +876,13 @@ static int mwifiex_deinit_priv_params(struct mwifiex_private *priv)
spin_unlock_irqrestore(&adapter->main_proc_lock, flags); spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
} }
spin_lock_irqsave(&adapter->rx_proc_lock, flags); spin_lock_bh(&adapter->rx_proc_lock);
adapter->rx_locked = true; adapter->rx_locked = true;
if (adapter->rx_processing) { if (adapter->rx_processing) {
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
flush_workqueue(adapter->rx_workqueue); flush_workqueue(adapter->rx_workqueue);
} else { } else {
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
} }
mwifiex_free_priv(priv); mwifiex_free_priv(priv);
...@@ -934,9 +934,9 @@ mwifiex_init_new_priv_params(struct mwifiex_private *priv, ...@@ -934,9 +934,9 @@ mwifiex_init_new_priv_params(struct mwifiex_private *priv,
adapter->main_locked = false; adapter->main_locked = false;
spin_unlock_irqrestore(&adapter->main_proc_lock, flags); spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
spin_lock_irqsave(&adapter->rx_proc_lock, flags); spin_lock_bh(&adapter->rx_proc_lock);
adapter->rx_locked = false; adapter->rx_locked = false;
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
mwifiex_set_mac_address(priv, dev, false, NULL); mwifiex_set_mac_address(priv, dev, false, NULL);
...@@ -1827,7 +1827,6 @@ mwifiex_cfg80211_del_station(struct wiphy *wiphy, struct net_device *dev, ...@@ -1827,7 +1827,6 @@ mwifiex_cfg80211_del_station(struct wiphy *wiphy, struct net_device *dev,
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
struct mwifiex_sta_node *sta_node; struct mwifiex_sta_node *sta_node;
u8 deauth_mac[ETH_ALEN]; u8 deauth_mac[ETH_ALEN];
unsigned long flags;
if (!priv->bss_started && priv->wdev.cac_started) { if (!priv->bss_started && priv->wdev.cac_started) {
mwifiex_dbg(priv->adapter, INFO, "%s: abort CAC!\n", __func__); mwifiex_dbg(priv->adapter, INFO, "%s: abort CAC!\n", __func__);
...@@ -1845,11 +1844,11 @@ mwifiex_cfg80211_del_station(struct wiphy *wiphy, struct net_device *dev, ...@@ -1845,11 +1844,11 @@ mwifiex_cfg80211_del_station(struct wiphy *wiphy, struct net_device *dev,
eth_zero_addr(deauth_mac); eth_zero_addr(deauth_mac);
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
sta_node = mwifiex_get_sta_entry(priv, params->mac); sta_node = mwifiex_get_sta_entry(priv, params->mac);
if (sta_node) if (sta_node)
ether_addr_copy(deauth_mac, params->mac); ether_addr_copy(deauth_mac, params->mac);
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
if (is_valid_ether_addr(deauth_mac)) { if (is_valid_ether_addr(deauth_mac)) {
if (mwifiex_send_cmd(priv, HostCmd_CMD_UAP_STA_DEAUTH, if (mwifiex_send_cmd(priv, HostCmd_CMD_UAP_STA_DEAUTH,
...@@ -3852,15 +3851,14 @@ mwifiex_cfg80211_tdls_chan_switch(struct wiphy *wiphy, struct net_device *dev, ...@@ -3852,15 +3851,14 @@ mwifiex_cfg80211_tdls_chan_switch(struct wiphy *wiphy, struct net_device *dev,
struct cfg80211_chan_def *chandef) struct cfg80211_chan_def *chandef)
{ {
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
unsigned long flags;
u16 chan; u16 chan;
u8 second_chan_offset, band; u8 second_chan_offset, band;
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
sta_ptr = mwifiex_get_sta_entry(priv, addr); sta_ptr = mwifiex_get_sta_entry(priv, addr);
if (!sta_ptr) { if (!sta_ptr) {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
wiphy_err(wiphy, "%s: Invalid TDLS peer %pM\n", wiphy_err(wiphy, "%s: Invalid TDLS peer %pM\n",
__func__, addr); __func__, addr);
return -ENOENT; return -ENOENT;
...@@ -3868,18 +3866,18 @@ mwifiex_cfg80211_tdls_chan_switch(struct wiphy *wiphy, struct net_device *dev, ...@@ -3868,18 +3866,18 @@ mwifiex_cfg80211_tdls_chan_switch(struct wiphy *wiphy, struct net_device *dev,
if (!(sta_ptr->tdls_cap.extcap.ext_capab[3] & if (!(sta_ptr->tdls_cap.extcap.ext_capab[3] &
WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH)) { WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH)) {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
wiphy_err(wiphy, "%pM do not support tdls cs\n", addr); wiphy_err(wiphy, "%pM do not support tdls cs\n", addr);
return -ENOENT; return -ENOENT;
} }
if (sta_ptr->tdls_status == TDLS_CHAN_SWITCHING || if (sta_ptr->tdls_status == TDLS_CHAN_SWITCHING ||
sta_ptr->tdls_status == TDLS_IN_OFF_CHAN) { sta_ptr->tdls_status == TDLS_IN_OFF_CHAN) {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
wiphy_err(wiphy, "channel switch is running, abort request\n"); wiphy_err(wiphy, "channel switch is running, abort request\n");
return -EALREADY; return -EALREADY;
} }
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
chan = chandef->chan->hw_value; chan = chandef->chan->hw_value;
second_chan_offset = mwifiex_get_sec_chan_offset(chan); second_chan_offset = mwifiex_get_sec_chan_offset(chan);
...@@ -3895,23 +3893,22 @@ mwifiex_cfg80211_tdls_cancel_chan_switch(struct wiphy *wiphy, ...@@ -3895,23 +3893,22 @@ mwifiex_cfg80211_tdls_cancel_chan_switch(struct wiphy *wiphy,
const u8 *addr) const u8 *addr)
{ {
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
unsigned long flags;
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
sta_ptr = mwifiex_get_sta_entry(priv, addr); sta_ptr = mwifiex_get_sta_entry(priv, addr);
if (!sta_ptr) { if (!sta_ptr) {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
wiphy_err(wiphy, "%s: Invalid TDLS peer %pM\n", wiphy_err(wiphy, "%s: Invalid TDLS peer %pM\n",
__func__, addr); __func__, addr);
} else if (!(sta_ptr->tdls_status == TDLS_CHAN_SWITCHING || } else if (!(sta_ptr->tdls_status == TDLS_CHAN_SWITCHING ||
sta_ptr->tdls_status == TDLS_IN_BASE_CHAN || sta_ptr->tdls_status == TDLS_IN_BASE_CHAN ||
sta_ptr->tdls_status == TDLS_IN_OFF_CHAN)) { sta_ptr->tdls_status == TDLS_IN_OFF_CHAN)) {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
wiphy_err(wiphy, "tdls chan switch not initialize by %pM\n", wiphy_err(wiphy, "tdls chan switch not initialize by %pM\n",
addr); addr);
} else { } else {
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
mwifiex_stop_tdls_cs(priv, addr); mwifiex_stop_tdls_cs(priv, addr);
} }
} }
......
...@@ -61,19 +61,18 @@ static struct cmd_ctrl_node * ...@@ -61,19 +61,18 @@ static struct cmd_ctrl_node *
mwifiex_get_cmd_node(struct mwifiex_adapter *adapter) mwifiex_get_cmd_node(struct mwifiex_adapter *adapter)
{ {
struct cmd_ctrl_node *cmd_node; struct cmd_ctrl_node *cmd_node;
unsigned long flags;
spin_lock_irqsave(&adapter->cmd_free_q_lock, flags); spin_lock_bh(&adapter->cmd_free_q_lock);
if (list_empty(&adapter->cmd_free_q)) { if (list_empty(&adapter->cmd_free_q)) {
mwifiex_dbg(adapter, ERROR, mwifiex_dbg(adapter, ERROR,
"GET_CMD_NODE: cmd node not available\n"); "GET_CMD_NODE: cmd node not available\n");
spin_unlock_irqrestore(&adapter->cmd_free_q_lock, flags); spin_unlock_bh(&adapter->cmd_free_q_lock);
return NULL; return NULL;
} }
cmd_node = list_first_entry(&adapter->cmd_free_q, cmd_node = list_first_entry(&adapter->cmd_free_q,
struct cmd_ctrl_node, list); struct cmd_ctrl_node, list);
list_del(&cmd_node->list); list_del(&cmd_node->list);
spin_unlock_irqrestore(&adapter->cmd_free_q_lock, flags); spin_unlock_bh(&adapter->cmd_free_q_lock);
return cmd_node; return cmd_node;
} }
...@@ -117,8 +116,6 @@ static void ...@@ -117,8 +116,6 @@ static void
mwifiex_insert_cmd_to_free_q(struct mwifiex_adapter *adapter, mwifiex_insert_cmd_to_free_q(struct mwifiex_adapter *adapter,
struct cmd_ctrl_node *cmd_node) struct cmd_ctrl_node *cmd_node)
{ {
unsigned long flags;
if (!cmd_node) if (!cmd_node)
return; return;
...@@ -128,9 +125,9 @@ mwifiex_insert_cmd_to_free_q(struct mwifiex_adapter *adapter, ...@@ -128,9 +125,9 @@ mwifiex_insert_cmd_to_free_q(struct mwifiex_adapter *adapter,
mwifiex_clean_cmd_node(adapter, cmd_node); mwifiex_clean_cmd_node(adapter, cmd_node);
/* Insert node into cmd_free_q */ /* Insert node into cmd_free_q */
spin_lock_irqsave(&adapter->cmd_free_q_lock, flags); spin_lock_bh(&adapter->cmd_free_q_lock);
list_add_tail(&cmd_node->list, &adapter->cmd_free_q); list_add_tail(&cmd_node->list, &adapter->cmd_free_q);
spin_unlock_irqrestore(&adapter->cmd_free_q_lock, flags); spin_unlock_bh(&adapter->cmd_free_q_lock);
} }
/* This function reuses a command node. */ /* This function reuses a command node. */
...@@ -183,7 +180,6 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv, ...@@ -183,7 +180,6 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
struct host_cmd_ds_command *host_cmd; struct host_cmd_ds_command *host_cmd;
uint16_t cmd_code; uint16_t cmd_code;
uint16_t cmd_size; uint16_t cmd_size;
unsigned long flags;
if (!adapter || !cmd_node) if (!adapter || !cmd_node)
return -1; return -1;
...@@ -223,9 +219,9 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv, ...@@ -223,9 +219,9 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
cmd_node->priv->bss_num, cmd_node->priv->bss_num,
cmd_node->priv->bss_type)); cmd_node->priv->bss_type));
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->curr_cmd = cmd_node; adapter->curr_cmd = cmd_node;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
/* Adjust skb length */ /* Adjust skb length */
if (cmd_node->cmd_skb->len > cmd_size) if (cmd_node->cmd_skb->len > cmd_size)
...@@ -276,9 +272,9 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv, ...@@ -276,9 +272,9 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
adapter->cmd_wait_q.status = -1; adapter->cmd_wait_q.status = -1;
mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd); mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd);
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->curr_cmd = NULL; adapter->curr_cmd = NULL;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
adapter->dbg.num_cmd_host_to_card_failure++; adapter->dbg.num_cmd_host_to_card_failure++;
return -1; return -1;
...@@ -697,7 +693,6 @@ mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter, ...@@ -697,7 +693,6 @@ mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter,
{ {
struct host_cmd_ds_command *host_cmd = NULL; struct host_cmd_ds_command *host_cmd = NULL;
u16 command; u16 command;
unsigned long flags;
bool add_tail = true; bool add_tail = true;
host_cmd = (struct host_cmd_ds_command *) (cmd_node->cmd_skb->data); host_cmd = (struct host_cmd_ds_command *) (cmd_node->cmd_skb->data);
...@@ -719,12 +714,12 @@ mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter, ...@@ -719,12 +714,12 @@ mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter,
} }
} }
spin_lock_irqsave(&adapter->cmd_pending_q_lock, flags); spin_lock_bh(&adapter->cmd_pending_q_lock);
if (add_tail) if (add_tail)
list_add_tail(&cmd_node->list, &adapter->cmd_pending_q); list_add_tail(&cmd_node->list, &adapter->cmd_pending_q);
else else
list_add(&cmd_node->list, &adapter->cmd_pending_q); list_add(&cmd_node->list, &adapter->cmd_pending_q);
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, flags); spin_unlock_bh(&adapter->cmd_pending_q_lock);
atomic_inc(&adapter->cmd_pending); atomic_inc(&adapter->cmd_pending);
mwifiex_dbg(adapter, CMD, mwifiex_dbg(adapter, CMD,
...@@ -749,8 +744,6 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter) ...@@ -749,8 +744,6 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
struct cmd_ctrl_node *cmd_node; struct cmd_ctrl_node *cmd_node;
int ret = 0; int ret = 0;
struct host_cmd_ds_command *host_cmd; struct host_cmd_ds_command *host_cmd;
unsigned long cmd_flags;
unsigned long cmd_pending_q_flags;
/* Check if already in processing */ /* Check if already in processing */
if (adapter->curr_cmd) { if (adapter->curr_cmd) {
...@@ -759,13 +752,12 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter) ...@@ -759,13 +752,12 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
return -1; return -1;
} }
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, cmd_flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
/* Check if any command is pending */ /* Check if any command is pending */
spin_lock_irqsave(&adapter->cmd_pending_q_lock, cmd_pending_q_flags); spin_lock_bh(&adapter->cmd_pending_q_lock);
if (list_empty(&adapter->cmd_pending_q)) { if (list_empty(&adapter->cmd_pending_q)) {
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, spin_unlock_bh(&adapter->cmd_pending_q_lock);
cmd_pending_q_flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
return 0; return 0;
} }
cmd_node = list_first_entry(&adapter->cmd_pending_q, cmd_node = list_first_entry(&adapter->cmd_pending_q,
...@@ -778,17 +770,15 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter) ...@@ -778,17 +770,15 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
mwifiex_dbg(adapter, ERROR, mwifiex_dbg(adapter, ERROR,
"%s: cannot send cmd in sleep state,\t" "%s: cannot send cmd in sleep state,\t"
"this should not happen\n", __func__); "this should not happen\n", __func__);
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, spin_unlock_bh(&adapter->cmd_pending_q_lock);
cmd_pending_q_flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
return ret; return ret;
} }
list_del(&cmd_node->list); list_del(&cmd_node->list);
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, spin_unlock_bh(&adapter->cmd_pending_q_lock);
cmd_pending_q_flags);
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
ret = mwifiex_dnld_cmd_to_fw(priv, cmd_node); ret = mwifiex_dnld_cmd_to_fw(priv, cmd_node);
priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
/* Any command sent to the firmware when host is in sleep /* Any command sent to the firmware when host is in sleep
...@@ -822,7 +812,6 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) ...@@ -822,7 +812,6 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
uint16_t orig_cmdresp_no; uint16_t orig_cmdresp_no;
uint16_t cmdresp_no; uint16_t cmdresp_no;
uint16_t cmdresp_result; uint16_t cmdresp_result;
unsigned long flags;
if (!adapter->curr_cmd || !adapter->curr_cmd->resp_skb) { if (!adapter->curr_cmd || !adapter->curr_cmd->resp_skb) {
resp = (struct host_cmd_ds_command *) adapter->upld_buf; resp = (struct host_cmd_ds_command *) adapter->upld_buf;
...@@ -891,9 +880,9 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) ...@@ -891,9 +880,9 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
adapter->cmd_wait_q.status = -1; adapter->cmd_wait_q.status = -1;
mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd); mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd);
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->curr_cmd = NULL; adapter->curr_cmd = NULL;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
return -1; return -1;
} }
...@@ -925,9 +914,9 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) ...@@ -925,9 +914,9 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd); mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd);
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->curr_cmd = NULL; adapter->curr_cmd = NULL;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
} }
return ret; return ret;
...@@ -1033,17 +1022,16 @@ void ...@@ -1033,17 +1022,16 @@ void
mwifiex_cancel_pending_scan_cmd(struct mwifiex_adapter *adapter) mwifiex_cancel_pending_scan_cmd(struct mwifiex_adapter *adapter)
{ {
struct cmd_ctrl_node *cmd_node = NULL, *tmp_node; struct cmd_ctrl_node *cmd_node = NULL, *tmp_node;
unsigned long flags;
/* Cancel all pending scan command */ /* Cancel all pending scan command */
spin_lock_irqsave(&adapter->scan_pending_q_lock, flags); spin_lock_bh(&adapter->scan_pending_q_lock);
list_for_each_entry_safe(cmd_node, tmp_node, list_for_each_entry_safe(cmd_node, tmp_node,
&adapter->scan_pending_q, list) { &adapter->scan_pending_q, list) {
list_del(&cmd_node->list); list_del(&cmd_node->list);
cmd_node->wait_q_enabled = false; cmd_node->wait_q_enabled = false;
mwifiex_insert_cmd_to_free_q(adapter, cmd_node); mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
} }
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); spin_unlock_bh(&adapter->scan_pending_q_lock);
} }
/* /*
...@@ -1057,9 +1045,8 @@ void ...@@ -1057,9 +1045,8 @@ void
mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter) mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter)
{ {
struct cmd_ctrl_node *cmd_node = NULL, *tmp_node; struct cmd_ctrl_node *cmd_node = NULL, *tmp_node;
unsigned long flags, cmd_flags;
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, cmd_flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
/* Cancel current cmd */ /* Cancel current cmd */
if ((adapter->curr_cmd) && (adapter->curr_cmd->wait_q_enabled)) { if ((adapter->curr_cmd) && (adapter->curr_cmd->wait_q_enabled)) {
adapter->cmd_wait_q.status = -1; adapter->cmd_wait_q.status = -1;
...@@ -1068,7 +1055,7 @@ mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter) ...@@ -1068,7 +1055,7 @@ mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter)
/* no recycle probably wait for response */ /* no recycle probably wait for response */
} }
/* Cancel all pending command */ /* Cancel all pending command */
spin_lock_irqsave(&adapter->cmd_pending_q_lock, flags); spin_lock_bh(&adapter->cmd_pending_q_lock);
list_for_each_entry_safe(cmd_node, tmp_node, list_for_each_entry_safe(cmd_node, tmp_node,
&adapter->cmd_pending_q, list) { &adapter->cmd_pending_q, list) {
list_del(&cmd_node->list); list_del(&cmd_node->list);
...@@ -1077,8 +1064,8 @@ mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter) ...@@ -1077,8 +1064,8 @@ mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter)
adapter->cmd_wait_q.status = -1; adapter->cmd_wait_q.status = -1;
mwifiex_recycle_cmd_node(adapter, cmd_node); mwifiex_recycle_cmd_node(adapter, cmd_node);
} }
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, flags); spin_unlock_bh(&adapter->cmd_pending_q_lock);
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
mwifiex_cancel_scan(adapter); mwifiex_cancel_scan(adapter);
} }
...@@ -1097,11 +1084,10 @@ static void ...@@ -1097,11 +1084,10 @@ static void
mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter) mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
{ {
struct cmd_ctrl_node *cmd_node = NULL; struct cmd_ctrl_node *cmd_node = NULL;
unsigned long cmd_flags;
if ((adapter->curr_cmd) && if ((adapter->curr_cmd) &&
(adapter->curr_cmd->wait_q_enabled)) { (adapter->curr_cmd->wait_q_enabled)) {
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, cmd_flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
cmd_node = adapter->curr_cmd; cmd_node = adapter->curr_cmd;
/* setting curr_cmd to NULL is quite dangerous, because /* setting curr_cmd to NULL is quite dangerous, because
* mwifiex_process_cmdresp checks curr_cmd to be != NULL * mwifiex_process_cmdresp checks curr_cmd to be != NULL
...@@ -1112,7 +1098,7 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter) ...@@ -1112,7 +1098,7 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
* at that point * at that point
*/ */
adapter->curr_cmd = NULL; adapter->curr_cmd = NULL;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
mwifiex_recycle_cmd_node(adapter, cmd_node); mwifiex_recycle_cmd_node(adapter, cmd_node);
} }
......
...@@ -36,7 +36,6 @@ static int mwifiex_add_bss_prio_tbl(struct mwifiex_private *priv) ...@@ -36,7 +36,6 @@ static int mwifiex_add_bss_prio_tbl(struct mwifiex_private *priv)
struct mwifiex_adapter *adapter = priv->adapter; struct mwifiex_adapter *adapter = priv->adapter;
struct mwifiex_bss_prio_node *bss_prio; struct mwifiex_bss_prio_node *bss_prio;
struct mwifiex_bss_prio_tbl *tbl = adapter->bss_prio_tbl; struct mwifiex_bss_prio_tbl *tbl = adapter->bss_prio_tbl;
unsigned long flags;
bss_prio = kzalloc(sizeof(struct mwifiex_bss_prio_node), GFP_KERNEL); bss_prio = kzalloc(sizeof(struct mwifiex_bss_prio_node), GFP_KERNEL);
if (!bss_prio) if (!bss_prio)
...@@ -45,9 +44,9 @@ static int mwifiex_add_bss_prio_tbl(struct mwifiex_private *priv) ...@@ -45,9 +44,9 @@ static int mwifiex_add_bss_prio_tbl(struct mwifiex_private *priv)
bss_prio->priv = priv; bss_prio->priv = priv;
INIT_LIST_HEAD(&bss_prio->list); INIT_LIST_HEAD(&bss_prio->list);
spin_lock_irqsave(&tbl[priv->bss_priority].bss_prio_lock, flags); spin_lock_bh(&tbl[priv->bss_priority].bss_prio_lock);
list_add_tail(&bss_prio->list, &tbl[priv->bss_priority].bss_prio_head); list_add_tail(&bss_prio->list, &tbl[priv->bss_priority].bss_prio_head);
spin_unlock_irqrestore(&tbl[priv->bss_priority].bss_prio_lock, flags); spin_unlock_bh(&tbl[priv->bss_priority].bss_prio_lock);
return 0; return 0;
} }
...@@ -344,11 +343,9 @@ void mwifiex_set_trans_start(struct net_device *dev) ...@@ -344,11 +343,9 @@ void mwifiex_set_trans_start(struct net_device *dev)
void mwifiex_wake_up_net_dev_queue(struct net_device *netdev, void mwifiex_wake_up_net_dev_queue(struct net_device *netdev,
struct mwifiex_adapter *adapter) struct mwifiex_adapter *adapter)
{ {
unsigned long dev_queue_flags; spin_lock_bh(&adapter->queue_lock);
spin_lock_irqsave(&adapter->queue_lock, dev_queue_flags);
netif_tx_wake_all_queues(netdev); netif_tx_wake_all_queues(netdev);
spin_unlock_irqrestore(&adapter->queue_lock, dev_queue_flags); spin_unlock_bh(&adapter->queue_lock);
} }
/* /*
...@@ -357,11 +354,9 @@ void mwifiex_wake_up_net_dev_queue(struct net_device *netdev, ...@@ -357,11 +354,9 @@ void mwifiex_wake_up_net_dev_queue(struct net_device *netdev,
void mwifiex_stop_net_dev_queue(struct net_device *netdev, void mwifiex_stop_net_dev_queue(struct net_device *netdev,
struct mwifiex_adapter *adapter) struct mwifiex_adapter *adapter)
{ {
unsigned long dev_queue_flags; spin_lock_bh(&adapter->queue_lock);
spin_lock_irqsave(&adapter->queue_lock, dev_queue_flags);
netif_tx_stop_all_queues(netdev); netif_tx_stop_all_queues(netdev);
spin_unlock_irqrestore(&adapter->queue_lock, dev_queue_flags); spin_unlock_bh(&adapter->queue_lock);
} }
/* /*
...@@ -506,7 +501,6 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter) ...@@ -506,7 +501,6 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter)
struct mwifiex_private *priv; struct mwifiex_private *priv;
u8 i, first_sta = true; u8 i, first_sta = true;
int is_cmd_pend_q_empty; int is_cmd_pend_q_empty;
unsigned long flags;
adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING; adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
...@@ -547,9 +541,9 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter) ...@@ -547,9 +541,9 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter)
} }
} }
spin_lock_irqsave(&adapter->cmd_pending_q_lock, flags); spin_lock_bh(&adapter->cmd_pending_q_lock);
is_cmd_pend_q_empty = list_empty(&adapter->cmd_pending_q); is_cmd_pend_q_empty = list_empty(&adapter->cmd_pending_q);
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, flags); spin_unlock_bh(&adapter->cmd_pending_q_lock);
if (!is_cmd_pend_q_empty) { if (!is_cmd_pend_q_empty) {
/* Send the first command in queue and return */ /* Send the first command in queue and return */
if (mwifiex_main_process(adapter) != -1) if (mwifiex_main_process(adapter) != -1)
...@@ -574,7 +568,6 @@ static void mwifiex_delete_bss_prio_tbl(struct mwifiex_private *priv) ...@@ -574,7 +568,6 @@ static void mwifiex_delete_bss_prio_tbl(struct mwifiex_private *priv)
struct mwifiex_bss_prio_node *bssprio_node, *tmp_node; struct mwifiex_bss_prio_node *bssprio_node, *tmp_node;
struct list_head *head; struct list_head *head;
spinlock_t *lock; /* bss priority lock */ spinlock_t *lock; /* bss priority lock */
unsigned long flags;
for (i = 0; i < adapter->priv_num; ++i) { for (i = 0; i < adapter->priv_num; ++i) {
head = &adapter->bss_prio_tbl[i].bss_prio_head; head = &adapter->bss_prio_tbl[i].bss_prio_head;
...@@ -586,7 +579,7 @@ static void mwifiex_delete_bss_prio_tbl(struct mwifiex_private *priv) ...@@ -586,7 +579,7 @@ static void mwifiex_delete_bss_prio_tbl(struct mwifiex_private *priv)
priv->bss_type, priv->bss_num, i, head); priv->bss_type, priv->bss_num, i, head);
{ {
spin_lock_irqsave(lock, flags); spin_lock_bh(lock);
list_for_each_entry_safe(bssprio_node, tmp_node, head, list_for_each_entry_safe(bssprio_node, tmp_node, head,
list) { list) {
if (bssprio_node->priv == priv) { if (bssprio_node->priv == priv) {
...@@ -598,7 +591,7 @@ static void mwifiex_delete_bss_prio_tbl(struct mwifiex_private *priv) ...@@ -598,7 +591,7 @@ static void mwifiex_delete_bss_prio_tbl(struct mwifiex_private *priv)
kfree(bssprio_node); kfree(bssprio_node);
} }
} }
spin_unlock_irqrestore(lock, flags); spin_unlock_bh(lock);
} }
} }
} }
...@@ -630,7 +623,6 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter) ...@@ -630,7 +623,6 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter)
{ {
struct mwifiex_private *priv; struct mwifiex_private *priv;
s32 i; s32 i;
unsigned long flags;
struct sk_buff *skb; struct sk_buff *skb;
/* mwifiex already shutdown */ /* mwifiex already shutdown */
...@@ -665,7 +657,7 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter) ...@@ -665,7 +657,7 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter)
while ((skb = skb_dequeue(&adapter->tx_data_q))) while ((skb = skb_dequeue(&adapter->tx_data_q)))
mwifiex_write_data_complete(adapter, skb, 0, 0); mwifiex_write_data_complete(adapter, skb, 0, 0);
spin_lock_irqsave(&adapter->rx_proc_lock, flags); spin_lock_bh(&adapter->rx_proc_lock);
while ((skb = skb_dequeue(&adapter->rx_data_q))) { while ((skb = skb_dequeue(&adapter->rx_data_q))) {
struct mwifiex_rxinfo *rx_info = MWIFIEX_SKB_RXCB(skb); struct mwifiex_rxinfo *rx_info = MWIFIEX_SKB_RXCB(skb);
...@@ -678,7 +670,7 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter) ...@@ -678,7 +670,7 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter)
dev_kfree_skb_any(skb); dev_kfree_skb_any(skb);
} }
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
mwifiex_adapter_cleanup(adapter); mwifiex_adapter_cleanup(adapter);
......
...@@ -173,30 +173,27 @@ EXPORT_SYMBOL_GPL(mwifiex_queue_main_work); ...@@ -173,30 +173,27 @@ EXPORT_SYMBOL_GPL(mwifiex_queue_main_work);
static void mwifiex_queue_rx_work(struct mwifiex_adapter *adapter) static void mwifiex_queue_rx_work(struct mwifiex_adapter *adapter)
{ {
unsigned long flags; spin_lock_bh(&adapter->rx_proc_lock);
spin_lock_irqsave(&adapter->rx_proc_lock, flags);
if (adapter->rx_processing) { if (adapter->rx_processing) {
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
} else { } else {
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
queue_work(adapter->rx_workqueue, &adapter->rx_work); queue_work(adapter->rx_workqueue, &adapter->rx_work);
} }
} }
static int mwifiex_process_rx(struct mwifiex_adapter *adapter) static int mwifiex_process_rx(struct mwifiex_adapter *adapter)
{ {
unsigned long flags;
struct sk_buff *skb; struct sk_buff *skb;
struct mwifiex_rxinfo *rx_info; struct mwifiex_rxinfo *rx_info;
spin_lock_irqsave(&adapter->rx_proc_lock, flags); spin_lock_bh(&adapter->rx_proc_lock);
if (adapter->rx_processing || adapter->rx_locked) { if (adapter->rx_processing || adapter->rx_locked) {
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
goto exit_rx_proc; goto exit_rx_proc;
} else { } else {
adapter->rx_processing = true; adapter->rx_processing = true;
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
} }
/* Check for Rx data */ /* Check for Rx data */
...@@ -219,9 +216,9 @@ static int mwifiex_process_rx(struct mwifiex_adapter *adapter) ...@@ -219,9 +216,9 @@ static int mwifiex_process_rx(struct mwifiex_adapter *adapter)
mwifiex_handle_rx_packet(adapter, skb); mwifiex_handle_rx_packet(adapter, skb);
} }
} }
spin_lock_irqsave(&adapter->rx_proc_lock, flags); spin_lock_bh(&adapter->rx_proc_lock);
adapter->rx_processing = false; adapter->rx_processing = false;
spin_unlock_irqrestore(&adapter->rx_proc_lock, flags); spin_unlock_bh(&adapter->rx_proc_lock);
exit_rx_proc: exit_rx_proc:
return 0; return 0;
...@@ -825,13 +822,12 @@ mwifiex_clone_skb_for_tx_status(struct mwifiex_private *priv, ...@@ -825,13 +822,12 @@ mwifiex_clone_skb_for_tx_status(struct mwifiex_private *priv,
skb = skb_clone(skb, GFP_ATOMIC); skb = skb_clone(skb, GFP_ATOMIC);
if (skb) { if (skb) {
unsigned long flags;
int id; int id;
spin_lock_irqsave(&priv->ack_status_lock, flags); spin_lock_bh(&priv->ack_status_lock);
id = idr_alloc(&priv->ack_status_frames, orig_skb, id = idr_alloc(&priv->ack_status_frames, orig_skb,
1, 0x10, GFP_ATOMIC); 1, 0x10, GFP_ATOMIC);
spin_unlock_irqrestore(&priv->ack_status_lock, flags); spin_unlock_bh(&priv->ack_status_lock);
if (id >= 0) { if (id >= 0) {
tx_info = MWIFIEX_SKB_TXCB(skb); tx_info = MWIFIEX_SKB_TXCB(skb);
...@@ -1354,12 +1350,11 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv, ...@@ -1354,12 +1350,11 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
*/ */
int is_command_pending(struct mwifiex_adapter *adapter) int is_command_pending(struct mwifiex_adapter *adapter)
{ {
unsigned long flags;
int is_cmd_pend_q_empty; int is_cmd_pend_q_empty;
spin_lock_irqsave(&adapter->cmd_pending_q_lock, flags); spin_lock_bh(&adapter->cmd_pending_q_lock);
is_cmd_pend_q_empty = list_empty(&adapter->cmd_pending_q); is_cmd_pend_q_empty = list_empty(&adapter->cmd_pending_q);
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, flags); spin_unlock_bh(&adapter->cmd_pending_q_lock);
return !is_cmd_pend_q_empty; return !is_cmd_pend_q_empty;
} }
......
...@@ -1500,7 +1500,6 @@ int mwifiex_scan_networks(struct mwifiex_private *priv, ...@@ -1500,7 +1500,6 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
u8 filtered_scan; u8 filtered_scan;
u8 scan_current_chan_only; u8 scan_current_chan_only;
u8 max_chan_per_scan; u8 max_chan_per_scan;
unsigned long flags;
if (adapter->scan_processing) { if (adapter->scan_processing) {
mwifiex_dbg(adapter, WARN, mwifiex_dbg(adapter, WARN,
...@@ -1521,9 +1520,9 @@ int mwifiex_scan_networks(struct mwifiex_private *priv, ...@@ -1521,9 +1520,9 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
return -EFAULT; return -EFAULT;
} }
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->scan_processing = true; adapter->scan_processing = true;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
scan_cfg_out = kzalloc(sizeof(union mwifiex_scan_cmd_config_tlv), scan_cfg_out = kzalloc(sizeof(union mwifiex_scan_cmd_config_tlv),
GFP_KERNEL); GFP_KERNEL);
...@@ -1551,13 +1550,12 @@ int mwifiex_scan_networks(struct mwifiex_private *priv, ...@@ -1551,13 +1550,12 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
/* Get scan command from scan_pending_q and put to cmd_pending_q */ /* Get scan command from scan_pending_q and put to cmd_pending_q */
if (!ret) { if (!ret) {
spin_lock_irqsave(&adapter->scan_pending_q_lock, flags); spin_lock_bh(&adapter->scan_pending_q_lock);
if (!list_empty(&adapter->scan_pending_q)) { if (!list_empty(&adapter->scan_pending_q)) {
cmd_node = list_first_entry(&adapter->scan_pending_q, cmd_node = list_first_entry(&adapter->scan_pending_q,
struct cmd_ctrl_node, list); struct cmd_ctrl_node, list);
list_del(&cmd_node->list); list_del(&cmd_node->list);
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, spin_unlock_bh(&adapter->scan_pending_q_lock);
flags);
mwifiex_insert_cmd_to_pending_q(adapter, cmd_node); mwifiex_insert_cmd_to_pending_q(adapter, cmd_node);
queue_work(adapter->workqueue, &adapter->main_work); queue_work(adapter->workqueue, &adapter->main_work);
...@@ -1568,8 +1566,7 @@ int mwifiex_scan_networks(struct mwifiex_private *priv, ...@@ -1568,8 +1566,7 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
mwifiex_wait_queue_complete(adapter, cmd_node); mwifiex_wait_queue_complete(adapter, cmd_node);
} }
} else { } else {
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, spin_unlock_bh(&adapter->scan_pending_q_lock);
flags);
} }
} }
...@@ -1577,9 +1574,9 @@ int mwifiex_scan_networks(struct mwifiex_private *priv, ...@@ -1577,9 +1574,9 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
kfree(scan_chan_list); kfree(scan_chan_list);
done: done:
if (ret) { if (ret) {
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->scan_processing = false; adapter->scan_processing = false;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
} }
return ret; return ret;
} }
...@@ -1715,7 +1712,6 @@ static int mwifiex_update_curr_bss_params(struct mwifiex_private *priv, ...@@ -1715,7 +1712,6 @@ static int mwifiex_update_curr_bss_params(struct mwifiex_private *priv,
{ {
struct mwifiex_bssdescriptor *bss_desc; struct mwifiex_bssdescriptor *bss_desc;
int ret; int ret;
unsigned long flags;
/* Allocate and fill new bss descriptor */ /* Allocate and fill new bss descriptor */
bss_desc = kzalloc(sizeof(struct mwifiex_bssdescriptor), GFP_KERNEL); bss_desc = kzalloc(sizeof(struct mwifiex_bssdescriptor), GFP_KERNEL);
...@@ -1730,7 +1726,7 @@ static int mwifiex_update_curr_bss_params(struct mwifiex_private *priv, ...@@ -1730,7 +1726,7 @@ static int mwifiex_update_curr_bss_params(struct mwifiex_private *priv,
if (ret) if (ret)
goto done; goto done;
spin_lock_irqsave(&priv->curr_bcn_buf_lock, flags); spin_lock_bh(&priv->curr_bcn_buf_lock);
/* Make a copy of current BSSID descriptor */ /* Make a copy of current BSSID descriptor */
memcpy(&priv->curr_bss_params.bss_descriptor, bss_desc, memcpy(&priv->curr_bss_params.bss_descriptor, bss_desc,
sizeof(priv->curr_bss_params.bss_descriptor)); sizeof(priv->curr_bss_params.bss_descriptor));
...@@ -1739,7 +1735,7 @@ static int mwifiex_update_curr_bss_params(struct mwifiex_private *priv, ...@@ -1739,7 +1735,7 @@ static int mwifiex_update_curr_bss_params(struct mwifiex_private *priv,
* in mwifiex_save_curr_bcn() * in mwifiex_save_curr_bcn()
*/ */
mwifiex_save_curr_bcn(priv); mwifiex_save_curr_bcn(priv);
spin_unlock_irqrestore(&priv->curr_bcn_buf_lock, flags); spin_unlock_bh(&priv->curr_bcn_buf_lock);
done: done:
/* beacon_ie buffer was allocated in function /* beacon_ie buffer was allocated in function
...@@ -1993,15 +1989,14 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv) ...@@ -1993,15 +1989,14 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv)
{ {
struct mwifiex_adapter *adapter = priv->adapter; struct mwifiex_adapter *adapter = priv->adapter;
struct cmd_ctrl_node *cmd_node; struct cmd_ctrl_node *cmd_node;
unsigned long flags;
spin_lock_irqsave(&adapter->scan_pending_q_lock, flags); spin_lock_bh(&adapter->scan_pending_q_lock);
if (list_empty(&adapter->scan_pending_q)) { if (list_empty(&adapter->scan_pending_q)) {
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); spin_unlock_bh(&adapter->scan_pending_q_lock);
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->scan_processing = false; adapter->scan_processing = false;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
mwifiex_active_scan_req_for_passive_chan(priv); mwifiex_active_scan_req_for_passive_chan(priv);
...@@ -2025,13 +2020,13 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv) ...@@ -2025,13 +2020,13 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv)
} }
} else if ((priv->scan_aborting && !priv->scan_request) || } else if ((priv->scan_aborting && !priv->scan_request) ||
priv->scan_block) { priv->scan_block) {
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); spin_unlock_bh(&adapter->scan_pending_q_lock);
mwifiex_cancel_pending_scan_cmd(adapter); mwifiex_cancel_pending_scan_cmd(adapter);
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->scan_processing = false; adapter->scan_processing = false;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
if (!adapter->active_scan_triggered) { if (!adapter->active_scan_triggered) {
if (priv->scan_request) { if (priv->scan_request) {
...@@ -2057,7 +2052,7 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv) ...@@ -2057,7 +2052,7 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv)
cmd_node = list_first_entry(&adapter->scan_pending_q, cmd_node = list_first_entry(&adapter->scan_pending_q,
struct cmd_ctrl_node, list); struct cmd_ctrl_node, list);
list_del(&cmd_node->list); list_del(&cmd_node->list);
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); spin_unlock_bh(&adapter->scan_pending_q_lock);
mwifiex_insert_cmd_to_pending_q(adapter, cmd_node); mwifiex_insert_cmd_to_pending_q(adapter, cmd_node);
} }
...@@ -2067,15 +2062,14 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv) ...@@ -2067,15 +2062,14 @@ static void mwifiex_check_next_scan_command(struct mwifiex_private *priv)
void mwifiex_cancel_scan(struct mwifiex_adapter *adapter) void mwifiex_cancel_scan(struct mwifiex_adapter *adapter)
{ {
struct mwifiex_private *priv; struct mwifiex_private *priv;
unsigned long cmd_flags;
int i; int i;
mwifiex_cancel_pending_scan_cmd(adapter); mwifiex_cancel_pending_scan_cmd(adapter);
if (adapter->scan_processing) { if (adapter->scan_processing) {
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, cmd_flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->scan_processing = false; adapter->scan_processing = false;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
for (i = 0; i < adapter->priv_num; i++) { for (i = 0; i < adapter->priv_num; i++) {
priv = adapter->priv[i]; priv = adapter->priv[i];
if (!priv) if (!priv)
...@@ -2557,7 +2551,6 @@ int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv, ...@@ -2557,7 +2551,6 @@ int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv,
struct host_cmd_ds_command *cmd_ptr; struct host_cmd_ds_command *cmd_ptr;
struct cmd_ctrl_node *cmd_node; struct cmd_ctrl_node *cmd_node;
unsigned long cmd_flags, scan_flags;
bool complete_scan = false; bool complete_scan = false;
mwifiex_dbg(adapter, INFO, "info: EXT scan returns successfully\n"); mwifiex_dbg(adapter, INFO, "info: EXT scan returns successfully\n");
...@@ -2592,8 +2585,8 @@ int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv, ...@@ -2592,8 +2585,8 @@ int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv,
sizeof(struct mwifiex_ie_types_header)); sizeof(struct mwifiex_ie_types_header));
} }
spin_lock_irqsave(&adapter->cmd_pending_q_lock, cmd_flags); spin_lock_bh(&adapter->cmd_pending_q_lock);
spin_lock_irqsave(&adapter->scan_pending_q_lock, scan_flags); spin_lock_bh(&adapter->scan_pending_q_lock);
if (list_empty(&adapter->scan_pending_q)) { if (list_empty(&adapter->scan_pending_q)) {
complete_scan = true; complete_scan = true;
list_for_each_entry(cmd_node, &adapter->cmd_pending_q, list) { list_for_each_entry(cmd_node, &adapter->cmd_pending_q, list) {
...@@ -2607,8 +2600,8 @@ int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv, ...@@ -2607,8 +2600,8 @@ int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv,
} }
} }
} }
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, scan_flags); spin_unlock_bh(&adapter->scan_pending_q_lock);
spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, cmd_flags); spin_unlock_bh(&adapter->cmd_pending_q_lock);
if (complete_scan) if (complete_scan)
mwifiex_complete_scan(priv); mwifiex_complete_scan(priv);
...@@ -2780,13 +2773,12 @@ mwifiex_queue_scan_cmd(struct mwifiex_private *priv, ...@@ -2780,13 +2773,12 @@ mwifiex_queue_scan_cmd(struct mwifiex_private *priv,
struct cmd_ctrl_node *cmd_node) struct cmd_ctrl_node *cmd_node)
{ {
struct mwifiex_adapter *adapter = priv->adapter; struct mwifiex_adapter *adapter = priv->adapter;
unsigned long flags;
cmd_node->wait_q_enabled = true; cmd_node->wait_q_enabled = true;
cmd_node->condition = &adapter->scan_wait_q_woken; cmd_node->condition = &adapter->scan_wait_q_woken;
spin_lock_irqsave(&adapter->scan_pending_q_lock, flags); spin_lock_bh(&adapter->scan_pending_q_lock);
list_add_tail(&cmd_node->list, &adapter->scan_pending_q); list_add_tail(&cmd_node->list, &adapter->scan_pending_q);
spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); spin_unlock_bh(&adapter->scan_pending_q_lock);
} }
/* /*
......
...@@ -46,7 +46,6 @@ mwifiex_process_cmdresp_error(struct mwifiex_private *priv, ...@@ -46,7 +46,6 @@ mwifiex_process_cmdresp_error(struct mwifiex_private *priv,
{ {
struct mwifiex_adapter *adapter = priv->adapter; struct mwifiex_adapter *adapter = priv->adapter;
struct host_cmd_ds_802_11_ps_mode_enh *pm; struct host_cmd_ds_802_11_ps_mode_enh *pm;
unsigned long flags;
mwifiex_dbg(adapter, ERROR, mwifiex_dbg(adapter, ERROR,
"CMD_RESP: cmd %#x error, result=%#x\n", "CMD_RESP: cmd %#x error, result=%#x\n",
...@@ -87,9 +86,9 @@ mwifiex_process_cmdresp_error(struct mwifiex_private *priv, ...@@ -87,9 +86,9 @@ mwifiex_process_cmdresp_error(struct mwifiex_private *priv,
/* Handling errors here */ /* Handling errors here */
mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd); mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd);
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); spin_lock_bh(&adapter->mwifiex_cmd_lock);
adapter->curr_cmd = NULL; adapter->curr_cmd = NULL;
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); spin_unlock_bh(&adapter->mwifiex_cmd_lock);
} }
/* /*
......
...@@ -345,7 +345,6 @@ static void mwifiex_process_uap_tx_pause(struct mwifiex_private *priv, ...@@ -345,7 +345,6 @@ static void mwifiex_process_uap_tx_pause(struct mwifiex_private *priv,
{ {
struct mwifiex_tx_pause_tlv *tp; struct mwifiex_tx_pause_tlv *tp;
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
unsigned long flags;
tp = (void *)tlv; tp = (void *)tlv;
mwifiex_dbg(priv->adapter, EVENT, mwifiex_dbg(priv->adapter, EVENT,
...@@ -361,14 +360,14 @@ static void mwifiex_process_uap_tx_pause(struct mwifiex_private *priv, ...@@ -361,14 +360,14 @@ static void mwifiex_process_uap_tx_pause(struct mwifiex_private *priv,
} else if (is_multicast_ether_addr(tp->peermac)) { } else if (is_multicast_ether_addr(tp->peermac)) {
mwifiex_update_ralist_tx_pause(priv, tp->peermac, tp->tx_pause); mwifiex_update_ralist_tx_pause(priv, tp->peermac, tp->tx_pause);
} else { } else {
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
sta_ptr = mwifiex_get_sta_entry(priv, tp->peermac); sta_ptr = mwifiex_get_sta_entry(priv, tp->peermac);
if (sta_ptr && sta_ptr->tx_pause != tp->tx_pause) { if (sta_ptr && sta_ptr->tx_pause != tp->tx_pause) {
sta_ptr->tx_pause = tp->tx_pause; sta_ptr->tx_pause = tp->tx_pause;
mwifiex_update_ralist_tx_pause(priv, tp->peermac, mwifiex_update_ralist_tx_pause(priv, tp->peermac,
tp->tx_pause); tp->tx_pause);
} }
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
} }
} }
...@@ -378,7 +377,6 @@ static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv, ...@@ -378,7 +377,6 @@ static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv,
struct mwifiex_tx_pause_tlv *tp; struct mwifiex_tx_pause_tlv *tp;
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
int status; int status;
unsigned long flags;
tp = (void *)tlv; tp = (void *)tlv;
mwifiex_dbg(priv->adapter, EVENT, mwifiex_dbg(priv->adapter, EVENT,
...@@ -397,7 +395,7 @@ static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv, ...@@ -397,7 +395,7 @@ static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv,
status = mwifiex_get_tdls_link_status(priv, tp->peermac); status = mwifiex_get_tdls_link_status(priv, tp->peermac);
if (mwifiex_is_tdls_link_setup(status)) { if (mwifiex_is_tdls_link_setup(status)) {
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
sta_ptr = mwifiex_get_sta_entry(priv, tp->peermac); sta_ptr = mwifiex_get_sta_entry(priv, tp->peermac);
if (sta_ptr && sta_ptr->tx_pause != tp->tx_pause) { if (sta_ptr && sta_ptr->tx_pause != tp->tx_pause) {
sta_ptr->tx_pause = tp->tx_pause; sta_ptr->tx_pause = tp->tx_pause;
...@@ -405,7 +403,7 @@ static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv, ...@@ -405,7 +403,7 @@ static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv,
tp->peermac, tp->peermac,
tp->tx_pause); tp->tx_pause);
} }
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
} }
} }
} }
......
...@@ -33,12 +33,11 @@ static void mwifiex_restore_tdls_packets(struct mwifiex_private *priv, ...@@ -33,12 +33,11 @@ static void mwifiex_restore_tdls_packets(struct mwifiex_private *priv,
struct list_head *tid_list; struct list_head *tid_list;
struct sk_buff *skb, *tmp; struct sk_buff *skb, *tmp;
struct mwifiex_txinfo *tx_info; struct mwifiex_txinfo *tx_info;
unsigned long flags;
u32 tid; u32 tid;
u8 tid_down; u8 tid_down;
mwifiex_dbg(priv->adapter, DATA, "%s: %pM\n", __func__, mac); mwifiex_dbg(priv->adapter, DATA, "%s: %pM\n", __func__, mac);
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); spin_lock_bh(&priv->wmm.ra_list_spinlock);
skb_queue_walk_safe(&priv->tdls_txq, skb, tmp) { skb_queue_walk_safe(&priv->tdls_txq, skb, tmp) {
if (!ether_addr_equal(mac, skb->data)) if (!ether_addr_equal(mac, skb->data))
...@@ -78,7 +77,7 @@ static void mwifiex_restore_tdls_packets(struct mwifiex_private *priv, ...@@ -78,7 +77,7 @@ static void mwifiex_restore_tdls_packets(struct mwifiex_private *priv,
atomic_inc(&priv->wmm.tx_pkts_queued); atomic_inc(&priv->wmm.tx_pkts_queued);
} }
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); spin_unlock_bh(&priv->wmm.ra_list_spinlock);
return; return;
} }
...@@ -88,11 +87,10 @@ static void mwifiex_hold_tdls_packets(struct mwifiex_private *priv, ...@@ -88,11 +87,10 @@ static void mwifiex_hold_tdls_packets(struct mwifiex_private *priv,
struct mwifiex_ra_list_tbl *ra_list; struct mwifiex_ra_list_tbl *ra_list;
struct list_head *ra_list_head; struct list_head *ra_list_head;
struct sk_buff *skb, *tmp; struct sk_buff *skb, *tmp;
unsigned long flags;
int i; int i;
mwifiex_dbg(priv->adapter, DATA, "%s: %pM\n", __func__, mac); mwifiex_dbg(priv->adapter, DATA, "%s: %pM\n", __func__, mac);
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); spin_lock_bh(&priv->wmm.ra_list_spinlock);
for (i = 0; i < MAX_NUM_TID; i++) { for (i = 0; i < MAX_NUM_TID; i++) {
if (!list_empty(&priv->wmm.tid_tbl_ptr[i].ra_list)) { if (!list_empty(&priv->wmm.tid_tbl_ptr[i].ra_list)) {
...@@ -111,7 +109,7 @@ static void mwifiex_hold_tdls_packets(struct mwifiex_private *priv, ...@@ -111,7 +109,7 @@ static void mwifiex_hold_tdls_packets(struct mwifiex_private *priv,
} }
} }
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); spin_unlock_bh(&priv->wmm.ra_list_spinlock);
return; return;
} }
...@@ -1070,7 +1068,6 @@ mwifiex_tdls_process_disable_link(struct mwifiex_private *priv, const u8 *peer) ...@@ -1070,7 +1068,6 @@ mwifiex_tdls_process_disable_link(struct mwifiex_private *priv, const u8 *peer)
{ {
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
struct mwifiex_ds_tdls_oper tdls_oper; struct mwifiex_ds_tdls_oper tdls_oper;
unsigned long flags;
memset(&tdls_oper, 0, sizeof(struct mwifiex_ds_tdls_oper)); memset(&tdls_oper, 0, sizeof(struct mwifiex_ds_tdls_oper));
sta_ptr = mwifiex_get_sta_entry(priv, peer); sta_ptr = mwifiex_get_sta_entry(priv, peer);
...@@ -1078,11 +1075,9 @@ mwifiex_tdls_process_disable_link(struct mwifiex_private *priv, const u8 *peer) ...@@ -1078,11 +1075,9 @@ mwifiex_tdls_process_disable_link(struct mwifiex_private *priv, const u8 *peer)
if (sta_ptr) { if (sta_ptr) {
if (sta_ptr->is_11n_enabled) { if (sta_ptr->is_11n_enabled) {
mwifiex_11n_cleanup_reorder_tbl(priv); mwifiex_11n_cleanup_reorder_tbl(priv);
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, spin_lock_bh(&priv->wmm.ra_list_spinlock);
flags);
mwifiex_11n_delete_all_tx_ba_stream_tbl(priv); mwifiex_11n_delete_all_tx_ba_stream_tbl(priv);
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
flags);
} }
mwifiex_del_sta_entry(priv, peer); mwifiex_del_sta_entry(priv, peer);
} }
...@@ -1100,7 +1095,6 @@ mwifiex_tdls_process_enable_link(struct mwifiex_private *priv, const u8 *peer) ...@@ -1100,7 +1095,6 @@ mwifiex_tdls_process_enable_link(struct mwifiex_private *priv, const u8 *peer)
{ {
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
struct ieee80211_mcs_info mcs; struct ieee80211_mcs_info mcs;
unsigned long flags;
int i; int i;
sta_ptr = mwifiex_get_sta_entry(priv, peer); sta_ptr = mwifiex_get_sta_entry(priv, peer);
...@@ -1145,11 +1139,9 @@ mwifiex_tdls_process_enable_link(struct mwifiex_private *priv, const u8 *peer) ...@@ -1145,11 +1139,9 @@ mwifiex_tdls_process_enable_link(struct mwifiex_private *priv, const u8 *peer)
"tdls: enable link %pM failed\n", peer); "tdls: enable link %pM failed\n", peer);
if (sta_ptr) { if (sta_ptr) {
mwifiex_11n_cleanup_reorder_tbl(priv); mwifiex_11n_cleanup_reorder_tbl(priv);
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, spin_lock_bh(&priv->wmm.ra_list_spinlock);
flags);
mwifiex_11n_delete_all_tx_ba_stream_tbl(priv); mwifiex_11n_delete_all_tx_ba_stream_tbl(priv);
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
flags);
mwifiex_del_sta_entry(priv, peer); mwifiex_del_sta_entry(priv, peer);
} }
mwifiex_restore_tdls_packets(priv, peer, TDLS_LINK_TEARDOWN); mwifiex_restore_tdls_packets(priv, peer, TDLS_LINK_TEARDOWN);
...@@ -1194,7 +1186,6 @@ int mwifiex_get_tdls_list(struct mwifiex_private *priv, ...@@ -1194,7 +1186,6 @@ int mwifiex_get_tdls_list(struct mwifiex_private *priv,
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
struct tdls_peer_info *peer = buf; struct tdls_peer_info *peer = buf;
int count = 0; int count = 0;
unsigned long flags;
if (!ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info)) if (!ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info))
return 0; return 0;
...@@ -1203,7 +1194,7 @@ int mwifiex_get_tdls_list(struct mwifiex_private *priv, ...@@ -1203,7 +1194,7 @@ int mwifiex_get_tdls_list(struct mwifiex_private *priv,
if (!(priv->bss_type == MWIFIEX_BSS_TYPE_STA && priv->media_connected)) if (!(priv->bss_type == MWIFIEX_BSS_TYPE_STA && priv->media_connected))
return 0; return 0;
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
list_for_each_entry(sta_ptr, &priv->sta_list, list) { list_for_each_entry(sta_ptr, &priv->sta_list, list) {
if (mwifiex_is_tdls_link_setup(sta_ptr->tdls_status)) { if (mwifiex_is_tdls_link_setup(sta_ptr->tdls_status)) {
ether_addr_copy(peer->peer_addr, sta_ptr->mac_addr); ether_addr_copy(peer->peer_addr, sta_ptr->mac_addr);
...@@ -1213,7 +1204,7 @@ int mwifiex_get_tdls_list(struct mwifiex_private *priv, ...@@ -1213,7 +1204,7 @@ int mwifiex_get_tdls_list(struct mwifiex_private *priv,
break; break;
} }
} }
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
return count; return count;
} }
...@@ -1222,7 +1213,6 @@ void mwifiex_disable_all_tdls_links(struct mwifiex_private *priv) ...@@ -1222,7 +1213,6 @@ void mwifiex_disable_all_tdls_links(struct mwifiex_private *priv)
{ {
struct mwifiex_sta_node *sta_ptr; struct mwifiex_sta_node *sta_ptr;
struct mwifiex_ds_tdls_oper tdls_oper; struct mwifiex_ds_tdls_oper tdls_oper;
unsigned long flags;
if (list_empty(&priv->sta_list)) if (list_empty(&priv->sta_list))
return; return;
...@@ -1232,11 +1222,9 @@ void mwifiex_disable_all_tdls_links(struct mwifiex_private *priv) ...@@ -1232,11 +1222,9 @@ void mwifiex_disable_all_tdls_links(struct mwifiex_private *priv)
if (sta_ptr->is_11n_enabled) { if (sta_ptr->is_11n_enabled) {
mwifiex_11n_cleanup_reorder_tbl(priv); mwifiex_11n_cleanup_reorder_tbl(priv);
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, spin_lock_bh(&priv->wmm.ra_list_spinlock);
flags);
mwifiex_11n_delete_all_tx_ba_stream_tbl(priv); mwifiex_11n_delete_all_tx_ba_stream_tbl(priv);
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, spin_unlock_bh(&priv->wmm.ra_list_spinlock);
flags);
} }
mwifiex_restore_tdls_packets(priv, sta_ptr->mac_addr, mwifiex_restore_tdls_packets(priv, sta_ptr->mac_addr,
...@@ -1256,12 +1244,11 @@ void mwifiex_disable_all_tdls_links(struct mwifiex_private *priv) ...@@ -1256,12 +1244,11 @@ void mwifiex_disable_all_tdls_links(struct mwifiex_private *priv)
int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb) int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb)
{ {
struct mwifiex_auto_tdls_peer *peer; struct mwifiex_auto_tdls_peer *peer;
unsigned long flags;
u8 mac[ETH_ALEN]; u8 mac[ETH_ALEN];
ether_addr_copy(mac, skb->data); ether_addr_copy(mac, skb->data);
spin_lock_irqsave(&priv->auto_tdls_lock, flags); spin_lock_bh(&priv->auto_tdls_lock);
list_for_each_entry(peer, &priv->auto_tdls_list, list) { list_for_each_entry(peer, &priv->auto_tdls_list, list) {
if (!memcmp(mac, peer->mac_addr, ETH_ALEN)) { if (!memcmp(mac, peer->mac_addr, ETH_ALEN)) {
if (peer->rssi <= MWIFIEX_TDLS_RSSI_HIGH && if (peer->rssi <= MWIFIEX_TDLS_RSSI_HIGH &&
...@@ -1290,7 +1277,7 @@ int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb) ...@@ -1290,7 +1277,7 @@ int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb)
} }
} }
} }
spin_unlock_irqrestore(&priv->auto_tdls_lock, flags); spin_unlock_bh(&priv->auto_tdls_lock);
return 0; return 0;
} }
...@@ -1298,33 +1285,31 @@ int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb) ...@@ -1298,33 +1285,31 @@ int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb)
void mwifiex_flush_auto_tdls_list(struct mwifiex_private *priv) void mwifiex_flush_auto_tdls_list(struct mwifiex_private *priv)
{ {
struct mwifiex_auto_tdls_peer *peer, *tmp_node; struct mwifiex_auto_tdls_peer *peer, *tmp_node;
unsigned long flags;
spin_lock_irqsave(&priv->auto_tdls_lock, flags); spin_lock_bh(&priv->auto_tdls_lock);
list_for_each_entry_safe(peer, tmp_node, &priv->auto_tdls_list, list) { list_for_each_entry_safe(peer, tmp_node, &priv->auto_tdls_list, list) {
list_del(&peer->list); list_del(&peer->list);
kfree(peer); kfree(peer);
} }
INIT_LIST_HEAD(&priv->auto_tdls_list); INIT_LIST_HEAD(&priv->auto_tdls_list);
spin_unlock_irqrestore(&priv->auto_tdls_lock, flags); spin_unlock_bh(&priv->auto_tdls_lock);
priv->check_tdls_tx = false; priv->check_tdls_tx = false;
} }
void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac) void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac)
{ {
struct mwifiex_auto_tdls_peer *tdls_peer; struct mwifiex_auto_tdls_peer *tdls_peer;
unsigned long flags;
if (!priv->adapter->auto_tdls) if (!priv->adapter->auto_tdls)
return; return;
spin_lock_irqsave(&priv->auto_tdls_lock, flags); spin_lock_bh(&priv->auto_tdls_lock);
list_for_each_entry(tdls_peer, &priv->auto_tdls_list, list) { list_for_each_entry(tdls_peer, &priv->auto_tdls_list, list) {
if (!memcmp(tdls_peer->mac_addr, mac, ETH_ALEN)) { if (!memcmp(tdls_peer->mac_addr, mac, ETH_ALEN)) {
tdls_peer->tdls_status = TDLS_SETUP_INPROGRESS; tdls_peer->tdls_status = TDLS_SETUP_INPROGRESS;
tdls_peer->rssi_jiffies = jiffies; tdls_peer->rssi_jiffies = jiffies;
spin_unlock_irqrestore(&priv->auto_tdls_lock, flags); spin_unlock_bh(&priv->auto_tdls_lock);
return; return;
} }
} }
...@@ -1341,19 +1326,18 @@ void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac) ...@@ -1341,19 +1326,18 @@ void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac)
"Add auto TDLS peer= %pM to list\n", mac); "Add auto TDLS peer= %pM to list\n", mac);
} }
spin_unlock_irqrestore(&priv->auto_tdls_lock, flags); spin_unlock_bh(&priv->auto_tdls_lock);
} }
void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv, void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv,
const u8 *mac, u8 link_status) const u8 *mac, u8 link_status)
{ {
struct mwifiex_auto_tdls_peer *peer; struct mwifiex_auto_tdls_peer *peer;
unsigned long flags;
if (!priv->adapter->auto_tdls) if (!priv->adapter->auto_tdls)
return; return;
spin_lock_irqsave(&priv->auto_tdls_lock, flags); spin_lock_bh(&priv->auto_tdls_lock);
list_for_each_entry(peer, &priv->auto_tdls_list, list) { list_for_each_entry(peer, &priv->auto_tdls_list, list) {
if (!memcmp(peer->mac_addr, mac, ETH_ALEN)) { if (!memcmp(peer->mac_addr, mac, ETH_ALEN)) {
if ((link_status == TDLS_NOT_SETUP) && if ((link_status == TDLS_NOT_SETUP) &&
...@@ -1366,19 +1350,18 @@ void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv, ...@@ -1366,19 +1350,18 @@ void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv,
break; break;
} }
} }
spin_unlock_irqrestore(&priv->auto_tdls_lock, flags); spin_unlock_bh(&priv->auto_tdls_lock);
} }
void mwifiex_auto_tdls_update_peer_signal(struct mwifiex_private *priv, void mwifiex_auto_tdls_update_peer_signal(struct mwifiex_private *priv,
u8 *mac, s8 snr, s8 nflr) u8 *mac, s8 snr, s8 nflr)
{ {
struct mwifiex_auto_tdls_peer *peer; struct mwifiex_auto_tdls_peer *peer;
unsigned long flags;
if (!priv->adapter->auto_tdls) if (!priv->adapter->auto_tdls)
return; return;
spin_lock_irqsave(&priv->auto_tdls_lock, flags); spin_lock_bh(&priv->auto_tdls_lock);
list_for_each_entry(peer, &priv->auto_tdls_list, list) { list_for_each_entry(peer, &priv->auto_tdls_list, list) {
if (!memcmp(peer->mac_addr, mac, ETH_ALEN)) { if (!memcmp(peer->mac_addr, mac, ETH_ALEN)) {
peer->rssi = nflr - snr; peer->rssi = nflr - snr;
...@@ -1386,14 +1369,13 @@ void mwifiex_auto_tdls_update_peer_signal(struct mwifiex_private *priv, ...@@ -1386,14 +1369,13 @@ void mwifiex_auto_tdls_update_peer_signal(struct mwifiex_private *priv,
break; break;
} }
} }
spin_unlock_irqrestore(&priv->auto_tdls_lock, flags); spin_unlock_bh(&priv->auto_tdls_lock);
} }
void mwifiex_check_auto_tdls(struct timer_list *t) void mwifiex_check_auto_tdls(struct timer_list *t)
{ {
struct mwifiex_private *priv = from_timer(priv, t, auto_tdls_timer); struct mwifiex_private *priv = from_timer(priv, t, auto_tdls_timer);
struct mwifiex_auto_tdls_peer *tdls_peer; struct mwifiex_auto_tdls_peer *tdls_peer;
unsigned long flags;
u16 reason = WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED; u16 reason = WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED;
if (WARN_ON_ONCE(!priv || !priv->adapter)) { if (WARN_ON_ONCE(!priv || !priv->adapter)) {
...@@ -1413,7 +1395,7 @@ void mwifiex_check_auto_tdls(struct timer_list *t) ...@@ -1413,7 +1395,7 @@ void mwifiex_check_auto_tdls(struct timer_list *t)
priv->check_tdls_tx = false; priv->check_tdls_tx = false;
spin_lock_irqsave(&priv->auto_tdls_lock, flags); spin_lock_bh(&priv->auto_tdls_lock);
list_for_each_entry(tdls_peer, &priv->auto_tdls_list, list) { list_for_each_entry(tdls_peer, &priv->auto_tdls_list, list) {
if ((jiffies - tdls_peer->rssi_jiffies) > if ((jiffies - tdls_peer->rssi_jiffies) >
(MWIFIEX_AUTO_TDLS_IDLE_TIME * HZ)) { (MWIFIEX_AUTO_TDLS_IDLE_TIME * HZ)) {
...@@ -1448,7 +1430,7 @@ void mwifiex_check_auto_tdls(struct timer_list *t) ...@@ -1448,7 +1430,7 @@ void mwifiex_check_auto_tdls(struct timer_list *t)
tdls_peer->rssi); tdls_peer->rssi);
} }
} }
spin_unlock_irqrestore(&priv->auto_tdls_lock, flags); spin_unlock_bh(&priv->auto_tdls_lock);
mod_timer(&priv->auto_tdls_timer, mod_timer(&priv->auto_tdls_timer,
jiffies + msecs_to_jiffies(MWIFIEX_TIMER_10S)); jiffies + msecs_to_jiffies(MWIFIEX_TIMER_10S));
......
...@@ -334,15 +334,14 @@ void mwifiex_parse_tx_status_event(struct mwifiex_private *priv, ...@@ -334,15 +334,14 @@ void mwifiex_parse_tx_status_event(struct mwifiex_private *priv,
{ {
struct tx_status_event *tx_status = (void *)priv->adapter->event_body; struct tx_status_event *tx_status = (void *)priv->adapter->event_body;
struct sk_buff *ack_skb; struct sk_buff *ack_skb;
unsigned long flags;
struct mwifiex_txinfo *tx_info; struct mwifiex_txinfo *tx_info;
if (!tx_status->tx_token_id) if (!tx_status->tx_token_id)
return; return;
spin_lock_irqsave(&priv->ack_status_lock, flags); spin_lock_bh(&priv->ack_status_lock);
ack_skb = idr_remove(&priv->ack_status_frames, tx_status->tx_token_id); ack_skb = idr_remove(&priv->ack_status_frames, tx_status->tx_token_id);
spin_unlock_irqrestore(&priv->ack_status_lock, flags); spin_unlock_bh(&priv->ack_status_lock);
if (ack_skb) { if (ack_skb) {
tx_info = MWIFIEX_SKB_TXCB(ack_skb); tx_info = MWIFIEX_SKB_TXCB(ack_skb);
......
...@@ -71,11 +71,10 @@ mwifiex_uap_del_tx_pkts_in_ralist(struct mwifiex_private *priv, ...@@ -71,11 +71,10 @@ mwifiex_uap_del_tx_pkts_in_ralist(struct mwifiex_private *priv,
*/ */
static void mwifiex_uap_cleanup_tx_queues(struct mwifiex_private *priv) static void mwifiex_uap_cleanup_tx_queues(struct mwifiex_private *priv)
{ {
unsigned long flags;
struct list_head *ra_list; struct list_head *ra_list;
int i; int i;
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); spin_lock_bh(&priv->wmm.ra_list_spinlock);
for (i = 0; i < MAX_NUM_TID; i++, priv->del_list_idx++) { for (i = 0; i < MAX_NUM_TID; i++, priv->del_list_idx++) {
if (priv->del_list_idx == MAX_NUM_TID) if (priv->del_list_idx == MAX_NUM_TID)
...@@ -87,7 +86,7 @@ static void mwifiex_uap_cleanup_tx_queues(struct mwifiex_private *priv) ...@@ -87,7 +86,7 @@ static void mwifiex_uap_cleanup_tx_queues(struct mwifiex_private *priv)
} }
} }
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); spin_unlock_bh(&priv->wmm.ra_list_spinlock);
} }
...@@ -378,7 +377,6 @@ int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv, ...@@ -378,7 +377,6 @@ int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,
struct rx_packet_hdr *rx_pkt_hdr; struct rx_packet_hdr *rx_pkt_hdr;
u16 rx_pkt_type; u16 rx_pkt_type;
u8 ta[ETH_ALEN], pkt_type; u8 ta[ETH_ALEN], pkt_type;
unsigned long flags;
struct mwifiex_sta_node *node; struct mwifiex_sta_node *node;
uap_rx_pd = (struct uap_rxpd *)(skb->data); uap_rx_pd = (struct uap_rxpd *)(skb->data);
...@@ -413,12 +411,12 @@ int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv, ...@@ -413,12 +411,12 @@ int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,
if (rx_pkt_type != PKT_TYPE_BAR && uap_rx_pd->priority < MAX_NUM_TID) { if (rx_pkt_type != PKT_TYPE_BAR && uap_rx_pd->priority < MAX_NUM_TID) {
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
node = mwifiex_get_sta_entry(priv, ta); node = mwifiex_get_sta_entry(priv, ta);
if (node) if (node)
node->rx_seq[uap_rx_pd->priority] = node->rx_seq[uap_rx_pd->priority] =
le16_to_cpu(uap_rx_pd->seq_num); le16_to_cpu(uap_rx_pd->seq_num);
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
} }
if (!priv->ap_11n_enabled || if (!priv->ap_11n_enabled ||
......
...@@ -1128,10 +1128,9 @@ static void mwifiex_usb_tx_aggr_tmo(struct timer_list *t) ...@@ -1128,10 +1128,9 @@ static void mwifiex_usb_tx_aggr_tmo(struct timer_list *t)
from_timer(timer_context, t, hold_timer); from_timer(timer_context, t, hold_timer);
struct mwifiex_adapter *adapter = timer_context->adapter; struct mwifiex_adapter *adapter = timer_context->adapter;
struct usb_tx_data_port *port = timer_context->port; struct usb_tx_data_port *port = timer_context->port;
unsigned long flags;
int err = 0; int err = 0;
spin_lock_irqsave(&port->tx_aggr_lock, flags); spin_lock_bh(&port->tx_aggr_lock);
err = mwifiex_usb_prepare_tx_aggr_skb(adapter, port, &skb_send); err = mwifiex_usb_prepare_tx_aggr_skb(adapter, port, &skb_send);
if (err) { if (err) {
mwifiex_dbg(adapter, ERROR, mwifiex_dbg(adapter, ERROR,
...@@ -1158,7 +1157,7 @@ static void mwifiex_usb_tx_aggr_tmo(struct timer_list *t) ...@@ -1158,7 +1157,7 @@ static void mwifiex_usb_tx_aggr_tmo(struct timer_list *t)
if (err == -1) if (err == -1)
mwifiex_write_data_complete(adapter, skb_send, 0, -1); mwifiex_write_data_complete(adapter, skb_send, 0, -1);
unlock: unlock:
spin_unlock_irqrestore(&port->tx_aggr_lock, flags); spin_unlock_bh(&port->tx_aggr_lock);
} }
/* This function write a command/data packet to card. */ /* This function write a command/data packet to card. */
...@@ -1169,7 +1168,6 @@ static int mwifiex_usb_host_to_card(struct mwifiex_adapter *adapter, u8 ep, ...@@ -1169,7 +1168,6 @@ static int mwifiex_usb_host_to_card(struct mwifiex_adapter *adapter, u8 ep,
struct usb_card_rec *card = adapter->card; struct usb_card_rec *card = adapter->card;
struct urb_context *context = NULL; struct urb_context *context = NULL;
struct usb_tx_data_port *port = NULL; struct usb_tx_data_port *port = NULL;
unsigned long flags;
int idx, ret; int idx, ret;
if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) { if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
...@@ -1211,10 +1209,10 @@ static int mwifiex_usb_host_to_card(struct mwifiex_adapter *adapter, u8 ep, ...@@ -1211,10 +1209,10 @@ static int mwifiex_usb_host_to_card(struct mwifiex_adapter *adapter, u8 ep,
} }
if (adapter->bus_aggr.enable) { if (adapter->bus_aggr.enable) {
spin_lock_irqsave(&port->tx_aggr_lock, flags); spin_lock_bh(&port->tx_aggr_lock);
ret = mwifiex_usb_aggr_tx_data(adapter, ep, skb, ret = mwifiex_usb_aggr_tx_data(adapter, ep, skb,
tx_param, port); tx_param, port);
spin_unlock_irqrestore(&port->tx_aggr_lock, flags); spin_unlock_bh(&port->tx_aggr_lock);
return ret; return ret;
} }
......
...@@ -607,12 +607,11 @@ struct mwifiex_sta_node * ...@@ -607,12 +607,11 @@ struct mwifiex_sta_node *
mwifiex_add_sta_entry(struct mwifiex_private *priv, const u8 *mac) mwifiex_add_sta_entry(struct mwifiex_private *priv, const u8 *mac)
{ {
struct mwifiex_sta_node *node; struct mwifiex_sta_node *node;
unsigned long flags;
if (!mac) if (!mac)
return NULL; return NULL;
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
node = mwifiex_get_sta_entry(priv, mac); node = mwifiex_get_sta_entry(priv, mac);
if (node) if (node)
goto done; goto done;
...@@ -625,7 +624,7 @@ mwifiex_add_sta_entry(struct mwifiex_private *priv, const u8 *mac) ...@@ -625,7 +624,7 @@ mwifiex_add_sta_entry(struct mwifiex_private *priv, const u8 *mac)
list_add_tail(&node->list, &priv->sta_list); list_add_tail(&node->list, &priv->sta_list);
done: done:
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
return node; return node;
} }
...@@ -662,9 +661,8 @@ mwifiex_set_sta_ht_cap(struct mwifiex_private *priv, const u8 *ies, ...@@ -662,9 +661,8 @@ mwifiex_set_sta_ht_cap(struct mwifiex_private *priv, const u8 *ies,
void mwifiex_del_sta_entry(struct mwifiex_private *priv, const u8 *mac) void mwifiex_del_sta_entry(struct mwifiex_private *priv, const u8 *mac)
{ {
struct mwifiex_sta_node *node; struct mwifiex_sta_node *node;
unsigned long flags;
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
node = mwifiex_get_sta_entry(priv, mac); node = mwifiex_get_sta_entry(priv, mac);
if (node) { if (node) {
...@@ -672,7 +670,7 @@ void mwifiex_del_sta_entry(struct mwifiex_private *priv, const u8 *mac) ...@@ -672,7 +670,7 @@ void mwifiex_del_sta_entry(struct mwifiex_private *priv, const u8 *mac)
kfree(node); kfree(node);
} }
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
return; return;
} }
...@@ -680,9 +678,8 @@ void mwifiex_del_sta_entry(struct mwifiex_private *priv, const u8 *mac) ...@@ -680,9 +678,8 @@ void mwifiex_del_sta_entry(struct mwifiex_private *priv, const u8 *mac)
void mwifiex_del_all_sta_list(struct mwifiex_private *priv) void mwifiex_del_all_sta_list(struct mwifiex_private *priv)
{ {
struct mwifiex_sta_node *node, *tmp; struct mwifiex_sta_node *node, *tmp;
unsigned long flags;
spin_lock_irqsave(&priv->sta_list_spinlock, flags); spin_lock_bh(&priv->sta_list_spinlock);
list_for_each_entry_safe(node, tmp, &priv->sta_list, list) { list_for_each_entry_safe(node, tmp, &priv->sta_list, list) {
list_del(&node->list); list_del(&node->list);
...@@ -690,7 +687,7 @@ void mwifiex_del_all_sta_list(struct mwifiex_private *priv) ...@@ -690,7 +687,7 @@ void mwifiex_del_all_sta_list(struct mwifiex_private *priv)
} }
INIT_LIST_HEAD(&priv->sta_list); INIT_LIST_HEAD(&priv->sta_list);
spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); spin_unlock_bh(&priv->sta_list_spinlock);
return; return;
} }
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment