diff options
author | Jakub Kicinski <kubakici@wp.pl> | 2015-07-31 15:04:48 +0200 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2015-08-10 21:19:34 +0200 |
commit | 4513493d188d5e3052aee68eda85eaaa1a4e41c2 (patch) | |
tree | bc9e79e33f8576939cabdfa1eee142901141ffe1 /drivers/net/wireless/mediatek/mt7601u/init.c | |
parent | mt7601u: use correct ieee80211_rx variant (diff) | |
download | linux-4513493d188d5e3052aee68eda85eaaa1a4e41c2.tar.xz linux-4513493d188d5e3052aee68eda85eaaa1a4e41c2.zip |
mt7601u: fix tx status reporting contexts
mac80211 requires that rx path does not run concurrently with
tx status reporting. Since rx path is run in driver tasklet,
tx status cannot be reported directly from interrupt context
(there would be no way to lock it out).
Add tasklet for tx and move all possible code from irq handler
there.
Note: tx tasklet is needed because workqueue is queued very
rarely and that kills TCP performance.
Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/mediatek/mt7601u/init.c')
-rw-r--r-- | drivers/net/wireless/mediatek/mt7601u/init.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/wireless/mediatek/mt7601u/init.c b/drivers/net/wireless/mediatek/mt7601u/init.c index df3dd56199a7..38eb20ba6e58 100644 --- a/drivers/net/wireless/mediatek/mt7601u/init.c +++ b/drivers/net/wireless/mediatek/mt7601u/init.c @@ -456,6 +456,7 @@ struct mt7601u_dev *mt7601u_alloc_device(struct device *pdev) spin_lock_init(&dev->lock); spin_lock_init(&dev->con_mon_lock); atomic_set(&dev->avg_ampdu_len, 1); + skb_queue_head_init(&dev->tx_skb_done); dev->stat_wq = alloc_workqueue("mt7601u", WQ_UNBOUND, 0); if (!dev->stat_wq) { |