summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Berg <benjamin.berg@intel.com>2024-02-28 19:14:37 +0100
committeriwlwifi publisher <>2024-04-17 13:35:50 +0000
commitba0e80c3b1cf3721c4498a35dd86d76b514d0b91 (patch)
treec2cf30c59d9d2f91a2b1537b0a1ddeb9228db040
parentd3a7d6e91854eb317974073fa7ad0150c3c2f010 (diff)
downloadbackport-iwlwifi-ba0e80c3b1cf3721c4498a35dd86d76b514d0b91.tar.gz
[BUGFIX] wifi: iwlwifi: mvm: assign link STA ID lookups during restart
When restarting the HW, mac80211 first adds the STA back with only one link enabled. This means that iwl_mvm_alloc_sta_after_restart will not see the other links and will not do the assignment. As such, do the assignment when mac80211 is activating the link for the station. type=bugfix ticket=none fixes=unknown Change-Id: I7cb6cf096ab135f4b489f2806b116563624aa5ee Signed-off-by: Benjamin Berg <benjamin.berg@intel.com> Reviewed-on: https://gerritwcs.ir.intel.com/c/iwlwifi-stack-dev/+/96673 tested: iil_jenkins iil_jenkins <EC.GER.UNIX.IIL.JENKINS@INTEL.COM> Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Reviewed-on: https://gerritwcs.ir.intel.com/c/iwlwifi-stack-dev/+/99149 Reviewed-by: Golan Ben Ami <golan.ben.ami@intel.com> x-iwlwifi-stack-dev: ee49d9a2fdfb885676725a8e98fd008c17a00aa1
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c13
-rw-r--r--versions2
2 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
index d7da9af4bb..34c9950de5 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
@@ -1146,10 +1146,21 @@ int iwl_mvm_mld_update_sta_links(struct iwl_mvm *mvm,
}
if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) {
- if (WARN_ON(!mvm_sta->link[link_id])) {
+ struct iwl_mvm_link_sta *mvm_link_sta =
+ rcu_dereference_protected(mvm_sta->link[link_id],
+ lockdep_is_held(&mvm->mutex));
+ u32 sta_id;
+
+ if (WARN_ON(!mvm_link_sta)) {
ret = -EINVAL;
goto err;
}
+
+ sta_id = mvm_link_sta->sta_id;
+
+ 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);
} else {
if (WARN_ON(mvm_sta->link[link_id])) {
ret = -EINVAL;
diff --git a/versions b/versions
index 862eddd137..0730dd3214 100644
--- a/versions
+++ b/versions
@@ -2,5 +2,5 @@ BACKPORTS_VERSION="(see git)"
BACKPORTED_KERNEL_VERSION="(see git)"
BACKPORTED_KERNEL_NAME="iwlwifi"
BACKPORTS_BUILD_TSTAMP=__DATE__ \" \" __TIME__
-BACKPORTS_GIT_TRACKED="iwlwifi-stack-public:release/core87:12012:101f93c8"
+BACKPORTS_GIT_TRACKED="iwlwifi-stack-public:release/core87:12013:ee49d9a2"
BACKPORTS_BRANCH_TSTAMP="Apr 17 2024 13:11:40"