From: Johannes Stezenbach <js@sig21.net>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-wireless@vger.kernel.org, Ivo van Doorn <IvDoorn@gmail.com>,
Gertjan van Wingerde <gwingerde@gmail.com>,
"John W. Linville" <linville@tuxdriver.com>,
Helmut Schaa <helmut.schaa@googlemail.com>
Subject: [PATCH v3 RFC] mac80211: add ieee80211_tx_status_ni()
Date: Mon, 29 Nov 2010 17:13:16 +0100 [thread overview]
Message-ID: <20101129161316.GA32760@sig21.net> (raw)
In-Reply-To: <1291046320.3532.6.camel@jlt3.sipsolutions.net>
ieee80211_tx_status() documentation says "This function may not be
called in IRQ context", and it is called by rt2800usb
from a workqueue context. However, ieee80211_tx_status() is
meant to be called from tasklets and thus uses netif_rx().
Add a new ieee80211_tx_status_ni() which does the same
thing but is safe to be called from process context.
Using ieee80211_tx_status_ni() for rt2800usb fixes the
"NOHZ: local_softirq_pending 08" messages I've been getting.
Signed-off-by: Johannes Stezenbach <js@sig21.net>
---
v2: add ieee80211_tx_status_ni()
v3: simplify accorindg to review
Note: the patch is now incomplete, rt2x00lib_txdone() is used by
several drivers, rt2800usb calls it from a workqueue while
e.g. while rt2800pci calls it from a tasklet
(rt2800pci_txstatus_tasklet). I need to sort this out with
the rt2x00 developers.
include/net/mac80211.h | 28 ++++++++++++++++++++++++----
1 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index eaa4aff..e411cf8 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,
*
* 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_tx_status_irqsafe() may not be mixed
- * for a single hardware.
+ * to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe()
+ * may not be mixed for a single hardware.
*
* @hw: the hardware the frame was transmitted by
* @skb: the frame that was transmitted, owned by mac80211 after this call
@@ -2065,13 +2065,33 @@ void ieee80211_tx_status(struct ieee80211_hw *hw,
struct sk_buff *skb);
/**
+ * ieee80211_tx_status_ni - transmit status callback (in process context)
+ *
+ * Like ieee80211_tx_status() but can be called in process context.
+ *
+ * Calls to this function, ieee80211_tx_status() and
+ * ieee80211_tx_status_irqsafe() may not be mixed
+ * for a single hardware.
+ *
+ * @hw: the hardware the frame was transmitted by
+ * @skb: the frame that was transmitted, owned by mac80211 after this call
+ */
+static inline void ieee80211_tx_status_ni(struct ieee80211_hw *hw,
+ struct sk_buff *skb)
+{
+ local_bh_disable();
+ ieee80211_tx_status(hw, skb);
+ local_bh_enable();
+}
+
+/**
* ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback
*
* Like ieee80211_tx_status() but can be called in IRQ context
* (internally defers to a tasklet.)
*
- * Calls to this function and ieee80211_tx_status() may not be mixed for a
- * single hardware.
+ * Calls to this function, ieee80211_tx_status() and
+ * ieee80211_tx_status_ni() may not be mixed for a single hardware.
*
* @hw: the hardware the frame was transmitted by
* @skb: the frame that was transmitted, owned by mac80211 after this call
next prev parent reply other threads:[~2010-11-29 16:13 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-29 14:54 [PATCH RFC] mac80211: fix "NOHZ: local_softirq_pending 08" Johannes Stezenbach
2010-11-29 15:09 ` Johannes Berg
2010-11-29 15:27 ` Johannes Stezenbach
2010-11-29 15:37 ` Johannes Berg
2010-11-29 15:51 ` [PATCH v2 " Johannes Stezenbach
2010-11-29 15:58 ` Johannes Berg
2010-11-29 16:13 ` Johannes Stezenbach [this message]
2010-11-30 15:49 ` [PATCH v4] mac80211/rt2x00: add ieee80211_tx_status_ni() Johannes Stezenbach
2010-11-30 15:53 ` Johannes Berg
2010-11-30 16:34 ` Johannes Stezenbach
2010-11-30 16:35 ` Johannes Berg
2010-11-30 18:38 ` John W. Linville
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101129161316.GA32760@sig21.net \
--to=js@sig21.net \
--cc=IvDoorn@gmail.com \
--cc=gwingerde@gmail.com \
--cc=helmut.schaa@googlemail.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.