Commit a0b9ecff authored by Johannes Berg's avatar Johannes Berg
Browse files

wifi: mac80211: reactivate multi-link later in restart



In case of restart, we currently reactivate multi-link on
interfaces before reconfiguring keys etc. which means the
drivers need to handle this case differently. Enable more
links later to allow them to handle it the same way.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240320091155.d0f18a56335d.Ib3338d93872a4a568f38db0d02546534d3eff810@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 6e02ba7c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1161,6 +1161,8 @@ struct ieee80211_sub_if_data {
	struct wiphy_work activate_links_work;
	u16 desired_active_links;

	u16 restart_active_links;

#ifdef CONFIG_MAC80211_DEBUGFS
	struct {
		struct dentry *subdir_stations;
+9 −3
Original line number Diff line number Diff line
@@ -1932,6 +1932,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
					     old);
		}

		sdata->restart_active_links = active_links;

		for (link_id = 0;
		     link_id < ARRAY_SIZE(sdata->vif.link_conf);
		     link_id++) {
@@ -2059,9 +2061,6 @@ int ieee80211_reconfig(struct ieee80211_local *local)
			WARN_ON(1);
			break;
		}

		if (active_links)
			ieee80211_set_active_links(&sdata->vif, active_links);
	}

	ieee80211_recalc_ps(local);
@@ -2102,6 +2101,13 @@ int ieee80211_reconfig(struct ieee80211_local *local)
	list_for_each_entry(sdata, &local->interfaces, list)
		ieee80211_reenable_keys(sdata);

	/* re-enable multi-link for client interfaces */
	list_for_each_entry(sdata, &local->interfaces, list) {
		if (sdata->restart_active_links)
			ieee80211_set_active_links(&sdata->vif,
						   sdata->restart_active_links);
	}

	/* Reconfigure sched scan if it was interrupted by FW restart */
	sched_scan_sdata = rcu_dereference_protected(local->sched_scan_sdata,
						lockdep_is_held(&local->hw.wiphy->mtx));