diff mbox series

[wireless-next,13/15] wifi: iwlwifi: mld: always do MLO scan before link selection

Message ID 20250308235203.a4c96e5c49d4.Ie55697af49435c2c45dccf7c607de5857b370f7a@changeid (mailing list archive)
State Superseded
Delegated to: Johannes Berg
Headers show
Series wifi: iwlwifi: updates - 2025-03-08 | expand

Checks

Context Check Description
wifibot/tree_selection success Clearly marked for wireless-next
wifibot/ynl success Generated files up to date; no warnings/errors; no diff in generated;
wifibot/fixes_present success Fixes tag not required for -next series
wifibot/series_format success Posting correctly formatted
wifibot/build_clang success Errors and warnings before: 0 this patch: 0
wifibot/build_clang_rust success No Rust files in patch. Skipping build
wifibot/build_tools success No tools touched, skip
wifibot/check_selftest success No net selftest shell script
wifibot/deprecated_api success None detected
wifibot/header_inline success No static functions without inline keyword in header files
wifibot/source_inline success Was 0 now: 0
wifibot/verify_fixes success No Fixes tag
wifibot/build_32bit success Errors and warnings before: 0 this patch: 0
wifibot/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
wifibot/checkpatch success total: 0 errors, 0 warnings, 0 checks, 61 lines checked
wifibot/kdoc success Errors and warnings before: 0 this patch: 0
wifibot/verify_signedoff success Signed-off-by tag matches author and committer

Commit Message

Miri Korenblit March 8, 2025, 10:01 p.m. UTC
According to the requirements, if the last scan isn't older than 20
seconds, we can use its results and do the link selection without
scanning before.
But this applies only when trying to get back to EMLSR, not if the link
has bad RSSI/missed beacons.
Since an MLO scan is cheap anyway, and results from 20 seconds before
are really old, always scan before links switching.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/intel/iwlwifi/mld/link.c |  2 +-
 drivers/net/wireless/intel/iwlwifi/mld/mlo.c  | 20 ++-----------------
 drivers/net/wireless/intel/iwlwifi/mld/mlo.h  |  3 ---
 .../net/wireless/intel/iwlwifi/mld/stats.c    |  2 +-
 4 files changed, 4 insertions(+), 23 deletions(-)
diff mbox series

Patch

diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c
index 1db69aee4e9f..6db8b5305349 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/link.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c
@@ -913,7 +913,7 @@  void iwl_mld_handle_missed_beacon_notif(struct iwl_mld *mld,
 		ieee80211_cqm_beacon_loss_notify(vif, GFP_ATOMIC);
 
 		/* try to switch links, no-op if we don't have MLO */
-		iwl_mld_trigger_link_selection(mld, vif);
+		iwl_mld_int_mlo_scan(mld, vif);
 	}
 
 	/* no more logic if we're not in EMLSR */
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c
index bbaf9ad0e9eb..99ba4018fb24 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c
@@ -289,22 +289,6 @@  int iwl_mld_block_emlsr_sync(struct iwl_mld *mld, struct ieee80211_vif *vif,
 static void _iwl_mld_select_links(struct iwl_mld *mld,
 				  struct ieee80211_vif *vif);
 
-void iwl_mld_trigger_link_selection(struct iwl_mld *mld,
-				    struct ieee80211_vif *vif)
-{
-	bool last_scan_was_recent =
-		time_before(jiffies, mld->scan.last_mlo_scan_jiffies +
-				     IWL_MLD_SCAN_EXPIRE_TIME);
-
-	if (last_scan_was_recent) {
-		IWL_DEBUG_EHT(mld, "MLO scan was recent, skip.\n");
-		_iwl_mld_select_links(mld, vif);
-	} else {
-		IWL_DEBUG_EHT(mld, "Doing link selection after MLO scan\n");
-		iwl_mld_int_mlo_scan(mld, vif);
-	}
-}
-
 void iwl_mld_unblock_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif,
 			   enum iwl_mld_emlsr_blocked reason)
 {
@@ -334,7 +318,7 @@  void iwl_mld_unblock_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif,
 		return;
 
 	IWL_DEBUG_INFO(mld, "EMLSR is unblocked\n");
-	iwl_mld_trigger_link_selection(mld, vif);
+	iwl_mld_int_mlo_scan(mld, vif);
 }
 
 static void
@@ -1011,5 +995,5 @@  void iwl_mld_retry_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif)
 	    mld_vif->emlsr.blocked_reasons)
 		return;
 
-	iwl_mld_trigger_link_selection(mld, vif);
+	iwl_mld_int_mlo_scan(mld, vif);
 }
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h
index fd1abe8e6084..0f1b18f61c75 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h
+++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h
@@ -141,9 +141,6 @@  void iwl_mld_emlsr_check_bt(struct iwl_mld *mld);
 
 void iwl_mld_emlsr_check_chan_load(struct iwl_mld *mld);
 
-void iwl_mld_trigger_link_selection(struct iwl_mld *mld,
-				    struct ieee80211_vif *vif);
-
 /**
  * iwl_mld_retry_emlsr - Retry entering EMLSR
  * @mld: MLD context
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/stats.c b/drivers/net/wireless/intel/iwlwifi/mld/stats.c
index 5633885c49ff..a9d3860d8f9c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/stats.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/stats.c
@@ -384,7 +384,7 @@  static void iwl_mld_update_link_sig(struct ieee80211_vif *vif, int sig,
 	/* Handle inactive EMLSR, check whether to switch links */
 	if (!iwl_mld_emlsr_active(vif)) {
 		if (sig < IWL_MLD_LOW_RSSI_MLO_SCAN_THRESH)
-			iwl_mld_trigger_link_selection(mld, vif);
+			iwl_mld_int_mlo_scan(mld, vif);
 		return;
 	}