]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/mac80211/pm.c
minstrel_ht: move minstrel_mcs_groups declaration to header file
[mv-sheeva.git] / net / mac80211 / pm.c
index 0e64484e861c74ad145cea45e22ce480c5b51ff4..d287fde0431d6b2e688da5400d0ef9f41d9cf1c2 100644 (file)
@@ -40,22 +40,14 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
        list_for_each_entry(sdata, &local->interfaces, list)
                ieee80211_disable_keys(sdata);
 
-       /* Tear down aggregation sessions */
-
-       rcu_read_lock();
-
-       if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) {
-               list_for_each_entry_rcu(sta, &local->sta_list, list) {
-                       set_sta_flags(sta, WLAN_STA_SUSPEND);
+       /* tear down aggregation sessions and remove STAs */
+       mutex_lock(&local->sta_mtx);
+       list_for_each_entry(sta, &local->sta_list, list) {
+               if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) {
+                       set_sta_flags(sta, WLAN_STA_BLOCK_BA);
                        ieee80211_sta_tear_down_BA_sessions(sta);
                }
-       }
 
-       rcu_read_unlock();
-
-       /* remove STAs */
-       mutex_lock(&local->sta_mtx);
-       list_for_each_entry(sta, &local->sta_list, list) {
                if (sta->uploaded) {
                        sdata = sta->sdata;
                        if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
@@ -72,6 +64,8 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
 
        /* remove all interfaces */
        list_for_each_entry(sdata, &local->interfaces, list) {
+               cancel_work_sync(&sdata->work);
+
                switch(sdata->vif.type) {
                case NL80211_IFTYPE_STATION:
                        ieee80211_sta_quiesce(sdata);