diff options
| author | John W. Linville <linville@tuxdriver.com> | 2012-03-13 14:38:51 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2012-03-13 14:38:51 -0400 |
| commit | 750084b51bc9a7962e7f7c9a29cede0234aed824 (patch) | |
| tree | 0ee4bc3d0a4da50591d8fe9f55f28ca20224e856 /drivers/net/wireless/rt2x00/rt2x00mac.c | |
| parent | 1ab5ecb90cb6a3df1476e052f76a6e8f6511cb3d (diff) | |
| parent | 3780d038fdf4b5ef26ead10b0604ab1f46dd9510 (diff) | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00mac.c')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00mac.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index ede3c58e6783..2df2eb6d3e06 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c @@ -152,13 +152,22 @@ void rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb) if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false))) goto exit_fail; + /* + * Pausing queue has to be serialized with rt2x00lib_txdone(). Note + * we should not use spin_lock_bh variant as bottom halve was already + * disabled before ieee80211_xmit() call. + */ + spin_lock(&queue->tx_lock); if (rt2x00queue_threshold(queue)) rt2x00queue_pause_queue(queue); + spin_unlock(&queue->tx_lock); return; exit_fail: + spin_lock(&queue->tx_lock); rt2x00queue_pause_queue(queue); + spin_unlock(&queue->tx_lock); exit_free_skb: ieee80211_free_txskb(hw, skb); } |
