Skip to content

Commit

Permalink
mac80211: add ieee80211_rx_ni()
Browse files Browse the repository at this point in the history
ieee80211_rx() must be called with bottom halves disabled. To simplify
driver development implement ieee80211_rx_ni() which disables BH. This
function must be used when in process context.

Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Kalle Valo authored and John W. Linville committed Oct 27, 2009
1 parent 88499ab commit e36e49f
Showing 1 changed file with 26 additions and 6 deletions.
32 changes: 26 additions & 6 deletions include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1665,11 +1665,11 @@ void ieee80211_restart_hw(struct ieee80211_hw *hw);
* header if %RX_FLAG_RADIOTAP is set in the @status flags.
*
* This function may not be called in IRQ context. Calls to this function
* for a single hardware must be synchronized against each other. Calls
* to this function and ieee80211_rx_irqsafe() may not be mixed for a
* single hardware.
* for a single hardware must be synchronized against each other. Calls to
* this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be
* mixed for a single hardware.
*
* Note that right now, this function must be called with softirqs disabled.
* In process context use instead ieee80211_rx_ni().
*
* @hw: the hardware this frame came in on
* @skb: the buffer to receive, owned by mac80211 after this call
Expand All @@ -1682,14 +1682,34 @@ void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb);
* Like ieee80211_rx() but can be called in IRQ context
* (internally defers to a tasklet.)
*
* Calls to this function and ieee80211_rx() may not be mixed for a
* single hardware.
* Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not
* be mixed for a single hardware.
*
* @hw: the hardware this frame came in on
* @skb: the buffer to receive, owned by mac80211 after this call
*/
void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb);

/**
* ieee80211_rx_ni - receive frame (in process context)
*
* Like ieee80211_rx() but can be called in process context
* (internally disables bottom halves).
*
* Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may
* not be mixed for a single hardware.
*
* @hw: the hardware this frame came in on
* @skb: the buffer to receive, owned by mac80211 after this call
*/
static inline void ieee80211_rx_ni(struct ieee80211_hw *hw,
struct sk_buff *skb)
{
local_bh_disable();
ieee80211_rx(hw, skb);
local_bh_enable();
}

/**
* ieee80211_tx_status - transmit status callback
*
Expand Down

0 comments on commit e36e49f

Please sign in to comment.