Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d8e4237 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: change locking around ieee80211_recalc_smps



Make the function acquire the necessary mutex itself
to simplify the callers.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 04b7b2ff
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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;
	}

+0 −2
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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);
+4 −3
Original line number Diff line number Diff line
@@ -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)