]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/mac80211/pm.c
mac80211: reset probe send counter upon connection timer reset
[karo-tx-linux.git] / net / mac80211 / pm.c
index 75202b295a4e81ba42691c61b4356347f94678bf..ce671dfd238c115281608e9fdb96b3ac3ce433fd 100644 (file)
@@ -12,7 +12,8 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
        struct ieee80211_sub_if_data *sdata;
        struct sta_info *sta;
 
-       ieee80211_scan_cancel(local);
+       if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)))
+               ieee80211_scan_cancel(local);
 
        ieee80211_stop_queues_by_reason(hw,
                        IEEE80211_QUEUE_STOP_REASON_SUSPEND);
@@ -40,22 +41,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) {
+       /* 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 +65,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);