summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWey-Yi Guy <wey-yi.w.guy@intel.com>2010-02-03 09:28:55 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2010-04-26 07:41:18 -0700
commita850f39d86b2fa5a0933ccd6c8e91e9e86d62937 (patch)
tree29d16e77b37a486c3826b13431977b3a861e4b42
parent6a45694284d21a5f1f322eea978247edd8916410 (diff)
mac80211: tear down all agg queues when restart/reconfig hw
commit 74e2bd1fa3ae9695af566ad5a7a288898787b909 upstream. When there is a need to restart/reconfig hw, tear down all the aggregation queues and let the mac80211 and driver get in-sync to have the opportunity to re-establish the aggregation queues again. Need to wait until driver re-establish all the station information before tear down the aggregation queues, driver(at least iwlwifi driver) will reject the stop aggregation queue request if station is not ready. But also need to make sure the aggregation queues are tear down before waking up the queues, so mac80211 will not sending frames with aggregation bit set. Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--net/mac80211/util.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 6a97c76036c8..31b10850905f 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1137,6 +1137,14 @@ int ieee80211_reconfig(struct ieee80211_local *local)
}
}
+ rcu_read_lock();
+ if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) {
+ list_for_each_entry_rcu(sta, &local->sta_list, list) {
+ ieee80211_sta_tear_down_BA_sessions(sta);
+ }
+ }
+ rcu_read_unlock();
+
/* add back keys */
list_for_each_entry(sdata, &local->interfaces, list)
if (netif_running(sdata->dev))