diff options
author | Johannes Stezenbach <js@sig21.net> | 2010-11-30 10:49:23 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-11-30 13:53:46 -0500 |
commit | 20ed3166c84d145589a89d8cde12aa32cf2d17f4 (patch) | |
tree | c6fa2fb5ce7ce1bd06f8787809c534b793813f28 /drivers/net/wireless/rt2x00/rt2x00dev.c | |
parent | 4352fab5c2a1a602447d711c84d149bf2f0bc7ba (diff) |
mac80211/rt2x00: add ieee80211_tx_status_ni()
All rt2x00 drivers except rt2800pci call ieee80211_tx_status() from
a workqueue, which causes "NOHZ: local_softirq_pending 08" messages.
To fix it, add ieee80211_tx_status_ni() similar to ieee80211_rx_ni()
which can be called from process context, and call it from
rt2x00lib_txdone(). For the rt2800pci special case a driver
flag is introduced.
Signed-off-by: Johannes Stezenbach <js@sig21.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index c879f9a7037c..bd3afc92f434 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -379,9 +379,12 @@ void rt2x00lib_txdone(struct queue_entry *entry, | |||
379 | * through a mac80211 library call (RTS/CTS) then we should not | 379 | * through a mac80211 library call (RTS/CTS) then we should not |
380 | * send the status report back. | 380 | * send the status report back. |
381 | */ | 381 | */ |
382 | if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) | 382 | if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) { |
383 | ieee80211_tx_status(rt2x00dev->hw, entry->skb); | 383 | if (test_bit(DRIVER_REQUIRE_TASKLET_CONTEXT, &rt2x00dev->flags)) |
384 | else | 384 | ieee80211_tx_status(rt2x00dev->hw, entry->skb); |
385 | else | ||
386 | ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb); | ||
387 | } else | ||
385 | dev_kfree_skb_any(entry->skb); | 388 | dev_kfree_skb_any(entry->skb); |
386 | 389 | ||
387 | /* | 390 | /* |