mac80211: move SMPS mode setting after ieee80211_prep_connection
authorShaul Triebitz <shaul.triebitz@intel.com>
Fri, 18 Jun 2021 10:41:34 +0000 (13:41 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 23 Jun 2021 09:29:14 +0000 (11:29 +0200)
ieee80211_mgd_assoc calls ieee80211_prep_connection which
might call ieee80211_prep_channel and set smps_mode to OFF.
That will override the previous setting of smps_mode in
ieee80211_mgd_assoc and HT SMPS will be set to "disabled"
in the association request frame.

Move the setting of smps_mode in ieee80211_mgd_assoc to
after the call to ieee80211_prep_connection.

Signed-off-by: Shaul Triebitz <shaul.triebitz@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210618133832.d8e5cc4b527f.Icf3a67fffbdd8c408c0cadfe43f8f4cffdc90acb@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mlme.c

index b1c44fa..b33b155 100644 (file)
@@ -5646,15 +5646,6 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
                       2 * FILS_NONCE_LEN);
 
        assoc_data->bss = req->bss;
-
-       if (ifmgd->req_smps == IEEE80211_SMPS_AUTOMATIC) {
-               if (ifmgd->powersave)
-                       sdata->smps_mode = IEEE80211_SMPS_DYNAMIC;
-               else
-                       sdata->smps_mode = IEEE80211_SMPS_OFF;
-       } else
-               sdata->smps_mode = ifmgd->req_smps;
-
        assoc_data->capability = req->bss->capability;
        assoc_data->supp_rates = bss->supp_rates;
        assoc_data->supp_rates_len = bss->supp_rates_len;
@@ -5761,6 +5752,15 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
        if (err)
                goto err_clear;
 
+       if (ifmgd->req_smps == IEEE80211_SMPS_AUTOMATIC) {
+               if (ifmgd->powersave)
+                       sdata->smps_mode = IEEE80211_SMPS_DYNAMIC;
+               else
+                       sdata->smps_mode = IEEE80211_SMPS_OFF;
+       } else {
+               sdata->smps_mode = ifmgd->req_smps;
+       }
+
        rcu_read_lock();
        beacon_ies = rcu_dereference(req->bss->beacon_ies);