| From 74e2bd1fa3ae9695af566ad5a7a288898787b909 Mon Sep 17 00:00:00 2001 |
| From: Wey-Yi Guy <wey-yi.w.guy@intel.com> |
| Date: Wed, 3 Feb 2010 09:28:55 -0800 |
| Subject: mac80211: tear down all agg queues when restart/reconfig hw |
| |
| From: Wey-Yi Guy <wey-yi.w.guy@intel.com> |
| |
| 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> |
| |
| --- |
| net/mac80211/util.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| --- a/net/mac80211/util.c |
| +++ b/net/mac80211/util.c |
| @@ -1137,6 +1137,14 @@ int ieee80211_reconfig(struct ieee80211_ |
| } |
| } |
| |
| + 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)) |