diff options
author | Jakub Kicinski <kubakici@wp.pl> | 2015-07-31 16:04:48 +0300 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2015-08-10 22:19:34 +0300 |
commit | 4513493d188d5e3052aee68eda85eaaa1a4e41c2 (patch) | |
tree | bc9e79e33f8576939cabdfa1eee142901141ffe1 /drivers/net/wireless/mediatek/mt7601u/mac.c | |
parent | d9517c0a5d7468a7ea63086057604fcb0fff480e (diff) | |
download | linux-4513493d188d5e3052aee68eda85eaaa1a4e41c2.tar.xz |
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/mac.c')
-rw-r--r-- | drivers/net/wireless/mediatek/mt7601u/mac.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/mediatek/mt7601u/mac.c b/drivers/net/wireless/mediatek/mt7601u/mac.c index 7514bce1ac91..e3928cfa3d63 100644 --- a/drivers/net/wireless/mediatek/mt7601u/mac.c +++ b/drivers/net/wireless/mediatek/mt7601u/mac.c @@ -181,7 +181,11 @@ void mt76_send_tx_status(struct mt7601u_dev *dev, struct mt76_tx_status *stat) } mt76_mac_fill_tx_status(dev, &info, stat); + + local_bh_disable(); ieee80211_tx_status_noskb(dev->hw, sta, &info); + local_bh_enable(); + rcu_read_unlock(); } |