mac80211: change locking around ieee80211_recalc_smps
authorJohannes Berg <johannes.berg@intel.com>
Tue, 11 Sep 2012 08:17:11 +0000 (10:17 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 14 Sep 2012 12:09:25 +0000 (14:09 +0200)
Make the function acquire the necessary mutex itself
to simplify the callers.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/cfg.c
net/mac80211/main.c
net/mac80211/mlme.c
net/mac80211/util.c

index 00e31b488adce3716961a1f7839c02a348059836..9bd56a744982a0c8df331c92425d1aee54a2414b 100644 (file)
@@ -2070,9 +2070,7 @@ int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata,
         */
        if (!sdata->u.mgd.associated ||
            sdata->vif.bss_conf.channel_type == NL80211_CHAN_NO_HT) {
-               mutex_lock(&sdata->local->iflist_mtx);
                ieee80211_recalc_smps(sdata->local);
-               mutex_unlock(&sdata->local->iflist_mtx);
                return 0;
        }
 
index 416e85eae2d279b2a9001f78042b1de1a18cc755..c80c4490351ce54fb75c41cdb9be1a313b0ffef5 100644 (file)
@@ -364,9 +364,7 @@ static void ieee80211_recalc_smps_work(struct work_struct *work)
        struct ieee80211_local *local =
                container_of(work, struct ieee80211_local, recalc_smps);
 
-       mutex_lock(&local->iflist_mtx);
        ieee80211_recalc_smps(local);
-       mutex_unlock(&local->iflist_mtx);
 }
 
 #ifdef CONFIG_INET
index 45a9fa63b368834f37f2e1699a08aa724500c2fe..2dbd9e1e3583ea0fda7fe4043ab888861a5c7277 100644 (file)
@@ -1348,9 +1348,9 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
 
        mutex_lock(&local->iflist_mtx);
        ieee80211_recalc_ps(local, -1);
-       ieee80211_recalc_smps(local);
        mutex_unlock(&local->iflist_mtx);
 
+       ieee80211_recalc_smps(local);
        ieee80211_recalc_ps_vif(sdata);
 
        netif_tx_start_all_queues(sdata->dev);
index 2017904c69cc133ee2adeb9d2555522a4dbc405a..22ca35054dd065753b9e7d6c4f3e5ab990903e83 100644 (file)
@@ -1606,14 +1606,13 @@ static int check_mgd_smps(struct ieee80211_if_managed *ifmgd,
        return 0;
 }
 
-/* must hold iflist_mtx */
 void ieee80211_recalc_smps(struct ieee80211_local *local)
 {
        struct ieee80211_sub_if_data *sdata;
        enum ieee80211_smps_mode smps_mode = IEEE80211_SMPS_OFF;
        int count = 0;
 
-       lockdep_assert_held(&local->iflist_mtx);
+       mutex_lock(&local->iflist_mtx);
 
        /*
         * This function could be improved to handle multiple
@@ -1642,12 +1641,14 @@ void ieee80211_recalc_smps(struct ieee80211_local *local)
        }
 
        if (smps_mode == local->smps_mode)
-               return;
+               goto unlock;
 
  set:
        local->smps_mode = smps_mode;
        /* changed flag is auto-detected for this */
        ieee80211_hw_config(local, 0);
+ unlock:
+       mutex_unlock(&local->iflist_mtx);
 }
 
 static bool ieee80211_id_in_list(const u8 *ids, int n_ids, u8 id)