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

Commit 6352c87f authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: reassign channel contexts before stations



Since channel contexts are usually present before
stations can be added to an interface, reassign
before stations them in reconfiguration as well.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 8b2c9824
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -1422,6 +1422,23 @@ int ieee80211_reconfig(struct ieee80211_local *local)
		WARN_ON(drv_add_chanctx(local, ctx));
	mutex_unlock(&local->chanctx_mtx);

	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);
	}

	/* add STAs back */
	mutex_lock(&local->sta_mtx);
	list_for_each_entry(sta, &local->sta_list, list) {
@@ -1462,22 +1479,11 @@ int ieee80211_reconfig(struct ieee80211_local *local)

	/* Finally also reconfigure all the BSS information */
	list_for_each_entry(sdata, &local->interfaces, list) {
		struct ieee80211_chanctx_conf *ctx_conf;
		u32 changed;

		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);

		/* common change flags for all interface types */
		changed = BSS_CHANGED_ERP_CTS_PROT |
			  BSS_CHANGED_ERP_PREAMBLE |