tty: Revert the tty locking series, it needs more work
[cascardo/linux.git] / net / mac80211 / offchannel.c
index 3d41441..f054e94 100644 (file)
@@ -138,31 +138,16 @@ void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
        mutex_unlock(&local->iflist_mtx);
 }
 
-void ieee80211_offchannel_enable_all_ps(struct ieee80211_local *local,
-                                       bool tell_ap)
-{
-       struct ieee80211_sub_if_data *sdata;
-
-       mutex_lock(&local->iflist_mtx);
-       list_for_each_entry(sdata, &local->interfaces, list) {
-               if (!ieee80211_sdata_running(sdata))
-                       continue;
-
-               if (sdata->vif.type == NL80211_IFTYPE_STATION &&
-                   sdata->u.mgd.associated)
-                       ieee80211_offchannel_ps_enable(sdata, tell_ap);
-       }
-       mutex_unlock(&local->iflist_mtx);
-}
-
 void ieee80211_offchannel_return(struct ieee80211_local *local,
-                                bool enable_beaconing,
                                 bool offchannel_ps_disable)
 {
        struct ieee80211_sub_if_data *sdata;
 
        mutex_lock(&local->iflist_mtx);
        list_for_each_entry(sdata, &local->interfaces, list) {
+               if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
+                       clear_bit(SDATA_STATE_OFFCHANNEL, &sdata->state);
+
                if (!ieee80211_sdata_running(sdata))
                        continue;
 
@@ -174,7 +159,6 @@ void ieee80211_offchannel_return(struct ieee80211_local *local,
                }
 
                if (sdata->vif.type != NL80211_IFTYPE_MONITOR) {
-                       clear_bit(SDATA_STATE_OFFCHANNEL, &sdata->state);
                        /*
                         * This may wake up queues even though the driver
                         * currently has them stopped. This is not very
@@ -188,11 +172,9 @@ void ieee80211_offchannel_return(struct ieee80211_local *local,
                        netif_tx_wake_all_queues(sdata->dev);
                }
 
-               /* Check to see if we should re-enable beaconing */
-               if (enable_beaconing &&
-                   (sdata->vif.type == NL80211_IFTYPE_AP ||
-                    sdata->vif.type == NL80211_IFTYPE_ADHOC ||
-                    sdata->vif.type == NL80211_IFTYPE_MESH_POINT))
+               if (sdata->vif.type == NL80211_IFTYPE_AP ||
+                   sdata->vif.type == NL80211_IFTYPE_ADHOC ||
+                   sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
                        ieee80211_bss_info_change_notify(
                                sdata, BSS_CHANGED_BEACON_ENABLED);
        }
@@ -212,8 +194,6 @@ static void ieee80211_hw_roc_start(struct work_struct *work)
                return;
        }
 
-       ieee80211_recalc_idle(local);
-
        if (local->hw_roc_skb) {
                sdata = IEEE80211_DEV_TO_SUB_IF(local->hw_roc_dev);
                ieee80211_tx_skb(sdata, local->hw_roc_skb);
@@ -227,6 +207,8 @@ static void ieee80211_hw_roc_start(struct work_struct *work)
                                          GFP_KERNEL);
        }
 
+       ieee80211_recalc_idle(local);
+
        mutex_unlock(&local->mtx);
 }