]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mac80211: update channel context before station state
authorMordechay Goodstein <mordechay.goodstein@intel.com>
Mon, 29 Nov 2021 13:32:42 +0000 (15:32 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 14 Dec 2021 10:21:39 +0000 (11:21 +0100)
Currently channel context is updated only after station got an update about
new assoc state, this results in station using the old channel context.

Fix this by moving the update channel context before updating station,
enabling the driver to immediately use the updated channel context in
the new assoc state.

Signed-off-by: Mordechay Goodstein <mordechay.goodstein@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20211129152938.1c80c17ffd8a.I94ae31378b363c1182cfdca46c4b7e7165cff984@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/sta_info.c

index 840ad1a860fa2ced3789e0e2b752537c85a1586f..537535a88990cf86877713b4cf46d086f6cc2fc0 100644 (file)
@@ -667,6 +667,15 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
 
        list_add_tail_rcu(&sta->list, &local->sta_list);
 
+       /* update channel context before notifying the driver about state
+        * change, this enables driver using the updated channel context right away.
+        */
+       if (sta->sta_state >= IEEE80211_STA_ASSOC) {
+               ieee80211_recalc_min_chandef(sta->sdata);
+               if (!sta->sta.support_p2p_ps)
+                       ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
+       }
+
        /* notify driver */
        err = sta_info_insert_drv_state(local, sdata, sta);
        if (err)
@@ -674,12 +683,6 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
 
        set_sta_flag(sta, WLAN_STA_INSERTED);
 
-       if (sta->sta_state >= IEEE80211_STA_ASSOC) {
-               ieee80211_recalc_min_chandef(sta->sdata);
-               if (!sta->sta.support_p2p_ps)
-                       ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
-       }
-
        /* accept BA sessions now */
        clear_sta_flag(sta, WLAN_STA_BLOCK_BA);