Commit c6d075be authored by Miri Korenblit's avatar Miri Korenblit Committed by Johannes Berg
Browse files

wifi: mac80211: defer link switch work in reconfig



If a link switch work was queued, and then a restart happened, the
worker might be executed before the reconfig, and obviously it will fail
(the HW might not respond to updates etc.)
So, don't perform the switch if we are in reconfig, instead - do it
at the end of the reconfig.

Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240415112355.1ef1008e3a0a.I19add3f2152dcfd55a759de97b1d09265c1cde98@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 570944a0
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1699,8 +1699,13 @@ static void ieee80211_activate_links_work(struct wiphy *wiphy,
	struct ieee80211_sub_if_data *sdata =
		container_of(work, struct ieee80211_sub_if_data,
			     activate_links_work);
	struct ieee80211_local *local = wiphy_priv(wiphy);

	if (local->in_reconfig)
		return;

	ieee80211_set_active_links(&sdata->vif, sdata->desired_active_links);
	sdata->desired_active_links = 0;
}

/*
+7 −0
Original line number Diff line number Diff line
@@ -2106,6 +2106,13 @@ int ieee80211_reconfig(struct ieee80211_local *local)
		if (sdata->restart_active_links)
			ieee80211_set_active_links(&sdata->vif,
						   sdata->restart_active_links);
		/*
		 * If a link switch was scheduled before the restart, and ran
		 * before reconfig, it will do nothing, so re-schedule.
		 */
		if (sdata->desired_active_links)
			wiphy_work_queue(sdata->local->hw.wiphy,
					 &sdata->activate_links_work);
	}

	/* Reconfigure sched scan if it was interrupted by FW restart */