Message ID | 20240420154435.dce72db5d5e3.Ic40b454b24f1c7b380a1eedf67455d9cf2f58541@changeid |
---|---|
State | New |
Headers | show |
Series | wifi: iwlwifi: mvm: fix link ID management | expand |
On 4/20/24 15:44, Johannes Berg wrote: > From: Johannes Berg <johannes.berg@intel.com> > > On older (pre-MLD API) devices, we started also calling > iwl_mvm_set_link_mapping()/iwl_mvm_unset_link_mapping(), > but of course not also iwl_mvm_remove_link(). Since the > link ID was only released in iwl_mvm_remove_link() this > causes us to run out of FW link IDs very quickly. Fix > it by releasing the link ID correctly. > > Fixes: a8b5d4809b50 ("wifi: iwlwifi: mvm: Configure the link mapping for non-MLD FW") > Signed-off-by: Johannes Berg <johannes.berg@intel.com> > --- > drivers/net/wireless/intel/iwlwifi/mvm/link.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/link.c b/drivers/net/wireless/intel/iwlwifi/mvm/link.c > index 9f69e04594e4..fe5bba8561d0 100644 > --- a/drivers/net/wireless/intel/iwlwifi/mvm/link.c > +++ b/drivers/net/wireless/intel/iwlwifi/mvm/link.c > @@ -279,6 +279,7 @@ int iwl_mvm_unset_link_mapping(struct iwl_mvm *mvm, struct ieee80211_vif *vif, > > RCU_INIT_POINTER(mvm->link_id_to_link_conf[link_info->fw_link_id], > NULL); > + iwl_mvm_release_fw_link_id(mvm, link_info->fw_link_id); > return 0; > } > > @@ -296,7 +297,6 @@ int iwl_mvm_remove_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif, > return 0; > > cmd.link_id = cpu_to_le32(link_info->fw_link_id); > - iwl_mvm_release_fw_link_id(mvm, link_info->fw_link_id); > link_info->fw_link_id = IWL_MVM_FW_LINK_ID_INVALID; > cmd.spec_link_id = link_conf->link_id; > cmd.phy_id = cpu_to_le32(FW_CTXT_INVALID); Hi, this patch fixes the issue on my old ThinkPad with Network controller: Intel Corporation Wireless 8265 / 8275 (rev 78) Tested-by: Tor Vic <torvic9@mailbox.org>
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/link.c b/drivers/net/wireless/intel/iwlwifi/mvm/link.c index 9f69e04594e4..fe5bba8561d0 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/link.c @@ -279,6 +279,7 @@ int iwl_mvm_unset_link_mapping(struct iwl_mvm *mvm, struct ieee80211_vif *vif, RCU_INIT_POINTER(mvm->link_id_to_link_conf[link_info->fw_link_id], NULL); + iwl_mvm_release_fw_link_id(mvm, link_info->fw_link_id); return 0; } @@ -296,7 +297,6 @@ int iwl_mvm_remove_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif, return 0; cmd.link_id = cpu_to_le32(link_info->fw_link_id); - iwl_mvm_release_fw_link_id(mvm, link_info->fw_link_id); link_info->fw_link_id = IWL_MVM_FW_LINK_ID_INVALID; cmd.spec_link_id = link_conf->link_id; cmd.phy_id = cpu_to_le32(FW_CTXT_INVALID);