From: Johannes Berg <johannes@sipsolutions.net>
To: linux-wireless@vger.kernel.org
Subject: [RFC 12/21] mac80211: remove non-irqsafe aggregation callbacks
Date: Mon, 07 Jun 2010 13:01:45 +0200 [thread overview]
Message-ID: <20100607110201.225614720@sipsolutions.net> (raw)
In-Reply-To: 20100607110133.472649120@sipsolutions.net
From: Johannes Berg <johannes.berg@intel.com>
The non-irqsafe aggregation start/stop done
callbacks are currently only used by ath9k_htc,
and can cause callbacks into the driver again.
This might lead to locking issues, which will
only get worse as we modify locking. To avoid
trouble, remove the non-irqsafe versions and
change ath9k_htc to use those instead.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 6 ++--
include/net/mac80211.h | 32 ++++----------------------
net/mac80211/agg-tx.c | 2 -
net/mac80211/ieee80211_i.h | 2 +
4 files changed, 10 insertions(+), 32 deletions(-)
--- wireless-testing.orig/include/net/mac80211.h 2010-06-06 13:11:21.000000000 +0200
+++ wireless-testing/include/net/mac80211.h 2010-06-06 13:22:24.000000000 +0200
@@ -1445,7 +1445,7 @@ enum ieee80211_filter_flags {
*
* Note that drivers MUST be able to deal with a TX aggregation
* session being stopped even before they OK'ed starting it by
- * calling ieee80211_start_tx_ba_cb(_irqsafe), because the peer
+ * calling ieee80211_start_tx_ba_cb_irqsafe, because the peer
* might receive the addBA frame and send a delBA right away!
*
* @IEEE80211_AMPDU_RX_START: start Rx aggregation
@@ -2314,25 +2314,14 @@ void ieee80211_queue_delayed_work(struct
int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
/**
- * ieee80211_start_tx_ba_cb - low level driver ready to aggregate.
- * @vif: &struct ieee80211_vif pointer from the add_interface callback
- * @ra: receiver address of the BA session recipient.
- * @tid: the TID to BA on.
- *
- * This function must be called by low level driver once it has
- * finished with preparations for the BA session.
- */
-void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
-
-/**
* ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
* @vif: &struct ieee80211_vif pointer from the add_interface callback
* @ra: receiver address of the BA session recipient.
* @tid: the TID to BA on.
*
* This function must be called by low level driver once it has
- * finished with preparations for the BA session.
- * This version of the function is IRQ-safe.
+ * finished with preparations for the BA session. It can be called
+ * from any context.
*/
void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
u16 tid);
@@ -2351,25 +2340,14 @@ void ieee80211_start_tx_ba_cb_irqsafe(st
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
/**
- * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate.
- * @vif: &struct ieee80211_vif pointer from the add_interface callback
- * @ra: receiver address of the BA session recipient.
- * @tid: the desired TID to BA on.
- *
- * This function must be called by low level driver once it has
- * finished with preparations for the BA session tear down.
- */
-void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
-
-/**
* ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate.
* @vif: &struct ieee80211_vif pointer from the add_interface callback
* @ra: receiver address of the BA session recipient.
* @tid: the desired TID to BA on.
*
* This function must be called by low level driver once it has
- * finished with preparations for the BA session tear down.
- * This version of the function is IRQ-safe.
+ * finished with preparations for the BA session tear down. It
+ * can be called from any context.
*/
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
u16 tid);
--- wireless-testing.orig/net/mac80211/agg-tx.c 2010-06-06 13:22:23.000000000 +0200
+++ wireless-testing/net/mac80211/agg-tx.c 2010-06-06 13:22:24.000000000 +0200
@@ -479,7 +479,6 @@ void ieee80211_start_tx_ba_cb(struct iee
spin_unlock_bh(&sta->lock);
rcu_read_unlock();
}
-EXPORT_SYMBOL(ieee80211_start_tx_ba_cb);
void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
const u8 *ra, u16 tid)
@@ -619,7 +618,6 @@ void ieee80211_stop_tx_ba_cb(struct ieee
spin_unlock_bh(&sta->lock);
rcu_read_unlock();
}
-EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb);
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
const u8 *ra, u16 tid)
--- wireless-testing.orig/net/mac80211/ieee80211_i.h 2010-06-06 13:22:23.000000000 +0200
+++ wireless-testing/net/mac80211/ieee80211_i.h 2010-06-06 13:22:24.000000000 +0200
@@ -1124,6 +1124,8 @@ void ieee80211_process_addba_request(str
int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
enum ieee80211_back_parties initiator);
+void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
+void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
/* Spectrum management */
void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
--- wireless-testing.orig/drivers/net/wireless/ath/ath9k/htc_drv_main.c 2010-06-06 13:11:20.000000000 +0200
+++ wireless-testing/drivers/net/wireless/ath/ath9k/htc_drv_main.c 2010-06-06 13:22:24.000000000 +0200
@@ -510,13 +510,13 @@ void ath9k_htc_aggr_work(struct work_str
ret = ath9k_htc_aggr_oper(priv, wk->vif, wk->sta_addr,
wk->tid, true);
if (!ret)
- ieee80211_start_tx_ba_cb(wk->vif, wk->sta_addr,
- wk->tid);
+ ieee80211_start_tx_ba_cb_irqsafe(wk->vif, wk->sta_addr,
+ wk->tid);
break;
case IEEE80211_AMPDU_TX_STOP:
ath9k_htc_aggr_oper(priv, wk->vif, wk->sta_addr,
wk->tid, false);
- ieee80211_stop_tx_ba_cb(wk->vif, wk->sta_addr, wk->tid);
+ ieee80211_stop_tx_ba_cb_irqsafe(wk->vif, wk->sta_addr, wk->tid);
break;
default:
ath_print(ath9k_hw_common(priv->ah), ATH_DBG_FATAL,
next prev parent reply other threads:[~2010-06-07 11:03 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-07 11:01 [RFC 00/21] sleeping ampdu_action Johannes Berg
2010-06-07 11:01 ` [RFC 01/21] mac80211: simplify station/aggregation code Johannes Berg
2010-06-07 11:01 ` [RFC 02/21] mac80211: use common skb queue Johannes Berg
2010-06-07 11:01 ` [RFC 03/21] mac80211: use common work struct Johannes Berg
2010-06-07 11:01 ` [RFC 04/21] mac80211: use common work function Johannes Berg
2010-06-07 11:01 ` [RFC 05/21] mac80211: common work skb freeing Johannes Berg
2010-06-07 11:01 ` [RFC 06/21] mac80211: pull mgmt frame rx into rx handler Johannes Berg
2010-06-07 11:01 ` [RFC 07/21] mac80211: always process blockack action from workqueue Johannes Berg
2010-06-07 11:01 ` [RFC 08/21] mac80211: move blockack stop due to fragmentation Johannes Berg
2010-06-07 11:01 ` [RFC 09/21] mac80211: move aggregation callback processing Johannes Berg
2010-06-07 11:01 ` [RFC 10/21] mac80211: use RCU for RX aggregation Johannes Berg
2010-06-07 11:01 ` [RFC 11/21] mac80211: use RCU for TX aggregation Johannes Berg
2010-06-07 11:01 ` Johannes Berg [this message]
2010-06-07 11:01 ` [RFC 13/21] mac80211: refcount aggregation queue stop Johannes Berg
2010-06-07 11:01 ` [RFC 14/21] mac80211: make TX aggregation start/stop request async Johannes Berg
2010-06-07 11:01 ` [RFC 15/21] mac80211: move BA session work Johannes Berg
2010-06-07 11:01 ` [RFC 16/21] mac80211: defer RX agg session teardown to work Johannes Berg
2010-06-07 11:01 ` [RFC 17/21] mac80211: fix RX aggregation timer Johannes Berg
2010-06-07 11:01 ` [RFC 18/21] mac80211: change RX aggregation locking Johannes Berg
2010-06-07 11:01 ` [RFC 19/21] mac80211: defer TX agg session teardown to work Johannes Berg
2010-06-07 11:01 ` [RFC 20/21] mac80211: change TX aggregation locking Johannes Berg
2010-06-07 11:01 ` [RFC 21/21] mac80211: allow drivers to sleep in ampdu_action Johannes Berg
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=20100607110201.225614720@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).