wifi: iwlwifi: mvm: send full STA during HW restart
authorJohannes Berg <johannes.berg@intel.com>
Wed, 29 Mar 2023 07:05:35 +0000 (10:05 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 30 Mar 2023 10:08:43 +0000 (12:08 +0200)
By using the internal station add the station is installed in
firmware with zeroed MAC addresses, which is wrong. Use the
full installation function instead, to fill all data.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230329100040.62d5371bb3c7.Ie25b62125a3a022f76a36bae5fed9796c18698aa@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c

index 4d713c7..26686cc 100644 (file)
@@ -572,10 +572,9 @@ static int iwl_mvm_alloc_sta_after_restart(struct iwl_mvm *mvm,
        struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
        struct ieee80211_link_sta *link_sta;
        unsigned int link_id;
-       struct iwl_mvm_int_sta tmp_sta = {
-               .type = mvm_sta->sta_type,
-       };
-       int sta_id, ret;
+       /* no active link found */
+       int ret = -EINVAL;
+       int sta_id;
 
        /* First add an empty station since allocating a queue requires
         * a valid station. Since we need a link_id to allocate a station,
@@ -598,23 +597,19 @@ static int iwl_mvm_alloc_sta_after_restart(struct iwl_mvm *mvm,
                        continue;
 
                sta_id = mvm_link_sta->sta_id;
-               tmp_sta.sta_id = sta_id;
-               ret = iwl_mvm_mld_add_int_sta_to_fw(mvm, &tmp_sta,
-                                                   vif->bss_conf.bssid,
-                                                   mvm_link->fw_link_id);
+               ret = iwl_mvm_mld_cfg_sta(mvm, sta, vif, link_sta,
+                                         link_conf, mvm_link_sta);
                if (ret)
                        return ret;
 
                rcu_assign_pointer(mvm->fw_id_to_mac_id[sta_id], sta);
                rcu_assign_pointer(mvm->fw_id_to_link_sta[sta_id], link_sta);
-               iwl_mvm_realloc_queues_after_restart(mvm, sta);
-
-               /* since we need only one station, no need to continue */
-               return 0;
+               ret = 0;
        }
 
-       /* no active link found */
-       return -EINVAL;
+       iwl_mvm_realloc_queues_after_restart(mvm, sta);
+
+       return ret;
 }
 
 int iwl_mvm_mld_add_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,