wifi: iwlwifi: mvm: consider having one active link
authorShaul Triebitz <shaul.triebitz@intel.com>
Mon, 11 Mar 2024 06:28:02 +0000 (08:28 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 25 Mar 2024 14:23:07 +0000 (15:23 +0100)
Do not call iwl_mvm_mld_get_primary_link if only one link
is active.
In that case, the sole active link should be used.

iwl_mvm_mld_get_primary_link returns -1 if only one link
is active causing a warning.

Fixes: 8c9bef26e98b ("wifi: iwlwifi: mvm: d3: implement suspend with MLO")
Signed-off-by: Shaul Triebitz <shaul.triebitz@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240311081938.6c50061bf69b.I05b0ac7fa7149eabaa5570a6f65b0d9bfb09a6f1@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/d3.c

index 553c6ff..52518a4 100644 (file)
@@ -1260,15 +1260,15 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
        if (IS_ERR_OR_NULL(vif))
                return 1;
 
-       if (ieee80211_vif_is_mld(vif) && vif->cfg.assoc) {
+       if (hweight16(vif->active_links) > 1) {
                /*
-                * Select the 'best' link. May need to revisit, it seems
-                * better to not optimize for throughput but rather range,
-                * reliability and power here - and select 2.4 GHz ...
+                * Select the 'best' link.
+                * May need to revisit, it seems better to not optimize
+                * for throughput but rather range, reliability and
+                * power here - and select 2.4 GHz ...
                 */
-               primary_link =
-                       iwl_mvm_mld_get_primary_link(mvm, vif,
-                                                    vif->active_links);
+               primary_link = iwl_mvm_mld_get_primary_link(mvm, vif,
+                                                           vif->active_links);
 
                if (WARN_ONCE(primary_link < 0, "no primary link in 0x%x\n",
                              vif->active_links))
@@ -1277,6 +1277,8 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
                ret = ieee80211_set_active_links(vif, BIT(primary_link));
                if (ret)
                        return ret;
+       } else if (vif->active_links) {
+               primary_link = __ffs(vif->active_links);
        } else {
                primary_link = 0;
        }