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

Commit 153a5fc4 authored by Stanislaw Gruszka's avatar Stanislaw Gruszka Committed by Johannes Berg
Browse files

mac80211: merge reconfig assign chanctx code

parent 690205f1
Loading
Loading
Loading
Loading
+22 −25
Original line number Diff line number Diff line
@@ -1357,6 +1357,25 @@ void ieee80211_stop_device(struct ieee80211_local *local)
	drv_stop(local);
}

static void ieee80211_assign_chanctx(struct ieee80211_local *local,
				     struct ieee80211_sub_if_data *sdata)
{
	struct ieee80211_chanctx_conf *conf;
	struct ieee80211_chanctx *ctx;

	if (!local->use_chanctx)
		return;

	mutex_lock(&local->chanctx_mtx);
	conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
					 lockdep_is_held(&local->chanctx_mtx));
	if (conf) {
		ctx = container_of(conf, struct ieee80211_chanctx, conf);
		drv_assign_vif_chanctx(local, sdata, ctx);
	}
	mutex_unlock(&local->chanctx_mtx);
}

int ieee80211_reconfig(struct ieee80211_local *local)
{
	struct ieee80211_hw *hw = &local->hw;
@@ -1445,36 +1464,14 @@ int ieee80211_reconfig(struct ieee80211_local *local)
	}

	list_for_each_entry(sdata, &local->interfaces, list) {
		struct ieee80211_chanctx_conf *ctx_conf;

		if (!ieee80211_sdata_running(sdata))
			continue;

		mutex_lock(&local->chanctx_mtx);
		ctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
				lockdep_is_held(&local->chanctx_mtx));
		if (ctx_conf) {
			ctx = container_of(ctx_conf, struct ieee80211_chanctx,
					   conf);
			drv_assign_vif_chanctx(local, sdata, ctx);
		}
		mutex_unlock(&local->chanctx_mtx);
		ieee80211_assign_chanctx(local, sdata);
	}

	sdata = rtnl_dereference(local->monitor_sdata);
	if (sdata && local->use_chanctx && ieee80211_sdata_running(sdata)) {
		struct ieee80211_chanctx_conf *ctx_conf;

		mutex_lock(&local->chanctx_mtx);
		ctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
				lockdep_is_held(&local->chanctx_mtx));
		if (ctx_conf) {
			ctx = container_of(ctx_conf, struct ieee80211_chanctx,
					   conf);
			drv_assign_vif_chanctx(local, sdata, ctx);
		}
		mutex_unlock(&local->chanctx_mtx);
	}
	if (sdata && ieee80211_sdata_running(sdata))
		ieee80211_assign_chanctx(local, sdata);

	/* add STAs back */
	mutex_lock(&local->sta_mtx);