wifi: iwlwifi: mvm: don't recompute EMLSR mode in can_activate_links
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 16 Apr 2024 10:54:08 +0000 (13:54 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 19 Apr 2024 08:16:34 +0000 (10:16 +0200)
mac80211 invokes the driver callback drv_can_activate_links() from
ieee80211_set_active_links to verify it can activate the desired link
combination.
However, ieee80211_set_active_links is called with more than one link in
2 cases:
- After driver's link selection decided to enter EMLSR
- From debugfs, for testing purposes.
For both cases there is no need to recompute all the considerations
determining whether to activate EMLSR.
Instead, only check if the vif is not blocked for EMLSR.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Link: https://msgid.link/20240416134215.202cf5a9ef2c.I65e4698b730a8652ad8d1c01420aabb41a1d04fd@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/link.c
drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h

index 4bb71a14ac3bba5a201ad55ae7e2a3cbdac90ecf..9f343d015d8126c2c142ee624db21c1fb3b57e7a 100644 (file)
@@ -518,6 +518,7 @@ unsigned int iwl_mvm_get_link_grade(struct ieee80211_bss_conf *link_conf)
 }
 EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_mvm_get_link_grade);
 
+static
 u8 iwl_mvm_set_link_selection_data(struct ieee80211_vif *vif,
                                   struct iwl_mvm_link_sel_data *data,
                                   unsigned long usable_links,
index 61f4c5dc3ceccccd4294db6a42869c95c3859203..4016aaf91e6ec14fa0015659d79ae9f5d2b20b5a 100644 (file)
@@ -1177,30 +1177,6 @@ bool iwl_mvm_esr_allowed_on_vif(struct iwl_mvm *mvm,
        return !(mvmvif->esr_disable_reason & ~IWL_MVM_ESR_BLOCKED_COEX);
 }
 
-/*
- * This function receives a bitmap of usable links and check if we can enter
- * eSR on those links.
- */
-static bool iwl_mvm_can_enter_esr(struct iwl_mvm *mvm,
-                                 struct ieee80211_vif *vif,
-                                 unsigned long desired_links)
-{
-       struct iwl_mvm_link_sel_data data[IEEE80211_MLD_MAX_NUM_LINKS];
-       u8 best_link, n_data;
-
-       if (!iwl_mvm_esr_allowed_on_vif(mvm, vif))
-               return false;
-
-       n_data = iwl_mvm_set_link_selection_data(vif, data, desired_links,
-                                                &best_link);
-
-       if (n_data != 2)
-               return false;
-
-
-       return iwl_mvm_mld_valid_link_pair(vif, &data[0], &data[1]);
-}
-
 static bool iwl_mvm_mld_can_activate_links(struct ieee80211_hw *hw,
                                           struct ieee80211_vif *vif,
                                           u16 desired_links)
@@ -1221,8 +1197,9 @@ static bool iwl_mvm_mld_can_activate_links(struct ieee80211_hw *hw,
        }
 
        /* If it is an eSR device, check that we can enter eSR */
-       if (iwl_mvm_is_esr_supported(mvm->fwrt.trans))
-               ret = iwl_mvm_can_enter_esr(mvm, vif, desired_links);
+       ret = iwl_mvm_is_esr_supported(mvm->fwrt.trans) &&
+             iwl_mvm_esr_allowed_on_vif(mvm, vif);
+
 unlock:
        mutex_unlock(&mvm->mutex);
        return ret;
index 920fd0afbb59f9a253a11845c28611cd339abeef..0e0b8dae52840586df2bb7e17e20f89090d66f72 100644 (file)
@@ -1992,23 +1992,18 @@ void iwl_mvm_select_links(struct iwl_mvm *mvm, struct ieee80211_vif *vif);
 u8 iwl_mvm_get_primary_link(struct ieee80211_vif *vif);
 u8 iwl_mvm_get_other_link(struct ieee80211_vif *vif, u8 link_id);
 
-#if IS_ENABLED(CONFIG_IWLWIFI_KUNIT_TESTS)
-unsigned int iwl_mvm_get_link_grade(struct ieee80211_bss_conf *link_conf);
-#endif
-
 struct iwl_mvm_link_sel_data {
        u8 link_id;
        enum nl80211_band band;
        u16 grade;
 };
 
-u8 iwl_mvm_set_link_selection_data(struct ieee80211_vif *vif,
-                                  struct iwl_mvm_link_sel_data *data,
-                                  unsigned long usable_links,
-                                  u8 *best_link_idx);
+#if IS_ENABLED(CONFIG_IWLWIFI_KUNIT_TESTS)
+unsigned int iwl_mvm_get_link_grade(struct ieee80211_bss_conf *link_conf);
 bool iwl_mvm_mld_valid_link_pair(struct ieee80211_vif *vif,
                                 const struct iwl_mvm_link_sel_data *a,
                                 const struct iwl_mvm_link_sel_data *b);
+#endif
 
 /* AP and IBSS */
 bool iwl_mvm_start_ap_ibss_common(struct ieee80211_hw *hw,