wifi: iwlwifi: mld: don't return an error if the FW is dead
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 30 Apr 2025 12:23:17 +0000 (15:23 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 6 May 2025 17:23:10 +0000 (20:23 +0300)
If iwl_mld_change_vif_links failed to add the requested link(s)
because the FW is dead (error before recovery), there is no point
in returning an error value, as the reconfig will re-add the link(s)
after the FW is started.
Return 0 in that case, and WARN in the others.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Link: https://patch.msgid.link/20250430151952.c549c72b1f37.I445bf723e9befc9541b4abd0ec7c72db8f1ff177@changeid
drivers/net/wireless/intel/iwlwifi/mld/mac80211.c

index 284599abf8c696d6b46a583293f1b938fc88379a..6710dcacecd30c5761565d4de7aad8b65878ff2a 100644 (file)
@@ -2457,8 +2457,10 @@ iwl_mld_change_vif_links(struct ieee80211_hw *hw,
        for (int i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
                if (added & BIT(i)) {
                        link_conf = link_conf_dereference_protected(vif, i);
-                       if (WARN_ON(!link_conf))
-                               return -EINVAL;
+                       if (!link_conf) {
+                               err = -EINVAL;
+                               goto remove_added_links;
+                       }
 
                        err = iwl_mld_add_link(mld, link_conf);
                        if (err)
@@ -2493,7 +2495,11 @@ remove_added_links:
                iwl_mld_remove_link(mld, link_conf);
        }
 
-       return err;
+       if (WARN_ON(!iwl_mld_error_before_recovery(mld)))
+               return err;
+
+       /* reconfig will fix us anyway */
+       return 0;
 }
 
 static int iwl_mld_change_sta_links(struct ieee80211_hw *hw,