]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: mld: always assign a fw id to a vif
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Sat, 21 Mar 2026 17:29:14 +0000 (19:29 +0200)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 25 Mar 2026 09:31:58 +0000 (11:31 +0200)
We used to have a fw id assignment in iwl_mld_init_vif since all interface
types that were added to the driver was immediately added to the FW as
well.
Since NAN was introduced, this is no longer the case - the NAN interface
is not added to the fw until a local schedule is configured.

For this vif we don't assign a fw id so it is 0 by default.
But later, when the vif is removed from the driver, we think that it has
a valid fw id (0) and we point fw_id_to_vif[0] to NULL.
fw_id_to_vif[0] might actually point to another vif with a valid fw id
0. In this case, we end up messing fw_id_to_vif.

Fix this by initializing a vif with a special invalid fw id, and by
exiting iwl_mld_rm_vif early for NAN interfaces.

Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260321192637.f3b5cc59098f.I3d1dbe66bd224cbb786c2b0ab3d1c9f7ec9003e4@changeid
drivers/net/wireless/intel/iwlwifi/mld/iface.c

index 21348d2e2edeb4572cfee5da53ea00dc8aa419b4..46c8d943fd55cc6715bd019a17e494c3d99c8f99 100644 (file)
@@ -404,6 +404,7 @@ iwl_mld_init_vif(struct iwl_mld *mld, struct ieee80211_vif *vif)
        lockdep_assert_wiphy(mld->wiphy);
 
        mld_vif->mld = mld;
+       mld_vif->fw_id = IWL_MLD_INVALID_FW_ID;
        mld_vif->roc_activity = ROC_NUM_ACTIVITIES;
 
        if (!mld->fw_status.in_hw_restart) {
@@ -451,6 +452,10 @@ void iwl_mld_rm_vif(struct iwl_mld *mld, struct ieee80211_vif *vif)
 
        lockdep_assert_wiphy(mld->wiphy);
 
+       /* NAN interface type is not known to FW */
+       if (vif->type == NL80211_IFTYPE_NAN)
+               return;
+
        iwl_mld_mac_fw_action(mld, vif, FW_CTXT_ACTION_REMOVE);
 
        if (WARN_ON(mld_vif->fw_id >= ARRAY_SIZE(mld->fw_id_to_vif)))