summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/mediatek/mt7601u/mac.c
diff options
context:
space:
mode:
authorJakub Kicinski <kubakici@wp.pl>2015-07-31 16:04:48 +0300
committerKalle Valo <kvalo@codeaurora.org>2015-08-10 22:19:34 +0300
commit4513493d188d5e3052aee68eda85eaaa1a4e41c2 (patch)
treebc9e79e33f8576939cabdfa1eee142901141ffe1 /drivers/net/wireless/mediatek/mt7601u/mac.c
parentd9517c0a5d7468a7ea63086057604fcb0fff480e (diff)
downloadlinux-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.c4
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();
}