aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJohannes Stezenbach <js@sig21.net>2010-11-30 10:49:23 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-11-30 13:53:46 -0500
commit20ed3166c84d145589a89d8cde12aa32cf2d17f4 (patch)
treec6fa2fb5ce7ce1bd06f8787809c534b793813f28 /include
parent4352fab5c2a1a602447d711c84d149bf2f0bc7ba (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 'include')
-rw-r--r--include/net/mac80211.h28
1 files changed, 24 insertions, 4 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index eaa4affd40cd..e411cf87fb41 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2055,8 +2055,8 @@ static inline void ieee80211_rx_ni(struct ieee80211_hw *hw,
2055 * 2055 *
2056 * This function may not be called in IRQ context. Calls to this function 2056 * This function may not be called in IRQ context. Calls to this function
2057 * for a single hardware must be synchronized against each other. Calls 2057 * for a single hardware must be synchronized against each other. Calls
2058 * to this function and ieee80211_tx_status_irqsafe() may not be mixed 2058 * to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe()
2059 * for a single hardware. 2059 * may not be mixed for a single hardware.
2060 * 2060 *
2061 * @hw: the hardware the frame was transmitted by 2061 * @hw: the hardware the frame was transmitted by
2062 * @skb: the frame that was transmitted, owned by mac80211 after this call 2062 * @skb: the frame that was transmitted, owned by mac80211 after this call
@@ -2065,13 +2065,33 @@ void ieee80211_tx_status(struct ieee80211_hw *hw,
2065 struct sk_buff *skb); 2065 struct sk_buff *skb);
2066 2066
2067/** 2067/**
2068 * ieee80211_tx_status_ni - transmit status callback (in process context)
2069 *
2070 * Like ieee80211_tx_status() but can be called in process context.
2071 *
2072 * Calls to this function, ieee80211_tx_status() and
2073 * ieee80211_tx_status_irqsafe() may not be mixed
2074 * for a single hardware.
2075 *
2076 * @hw: the hardware the frame was transmitted by
2077 * @skb: the frame that was transmitted, owned by mac80211 after this call
2078 */
2079static inline void ieee80211_tx_status_ni(struct ieee80211_hw *hw,
2080 struct sk_buff *skb)
2081{
2082 local_bh_disable();
2083 ieee80211_tx_status(hw, skb);
2084 local_bh_enable();
2085}
2086
2087/**
2068 * ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback 2088 * ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback
2069 * 2089 *
2070 * Like ieee80211_tx_status() but can be called in IRQ context 2090 * Like ieee80211_tx_status() but can be called in IRQ context
2071 * (internally defers to a tasklet.) 2091 * (internally defers to a tasklet.)
2072 * 2092 *
2073 * Calls to this function and ieee80211_tx_status() may not be mixed for a 2093 * Calls to this function, ieee80211_tx_status() and
2074 * single hardware. 2094 * ieee80211_tx_status_ni() may not be mixed for a single hardware.
2075 * 2095 *
2076 * @hw: the hardware the frame was transmitted by 2096 * @hw: the hardware the frame was transmitted by
2077 * @skb: the frame that was transmitted, owned by mac80211 after this call 2097 * @skb: the frame that was transmitted, owned by mac80211 after this call