]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mac80211: recalculate rx_nss on IBSS peer capability update
authorShahar Tzarfati <shahar.tzarfati@intel.com>
Mon, 6 Jul 2026 19:27:52 +0000 (22:27 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 7 Jul 2026 07:28:36 +0000 (09:28 +0200)
When IBSS peer capabilities change, rates_updated is set to true in
ieee80211_update_sta_info(), but rx_nss is never recalculated.
For peers with HT/VHT, this leaves rx_nss at 0 instead of the
correct value, causing drivers to use incorrect rate scaling
parameters.

The root cause is that the commit below moved NSS initialisation
out of rate_control_rate_init() into explicit call sites, but
missing the rates_updated path in ieee80211_update_sta_info().

Fix this by calling ieee80211_sta_init_nss_bw_capa() before
rate_control_rate_init() when peer capabilities are updated,
consistent with the other IBSS call sites added by that commit.

Fixes: e5ad38a9b261 ("wifi: mac80211: clean up STA NSS handling")
Signed-off-by: Shahar Tzarfati <shahar.tzarfati@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260706222724.422adfd57b71.I5a47f65c5e38a221712f5203e5c8040304b382b5@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/ibss.c

index d0fd6054f1820074f30f014205891894468376bb..1e5414ee27c0d17ac18a1e77aa185572a0e47454 100644 (file)
@@ -1029,8 +1029,8 @@ static void ieee80211_update_sta_info(struct ieee80211_sub_if_data *sdata,
                u32 changed = IEEE80211_RC_SUPP_RATES_CHANGED;
                u8 rx_nss = sta->sta.deflink.rx_nss;
 
-               /* Force rx_nss recalculation */
-               sta->sta.deflink.rx_nss = 0;
+               ieee80211_sta_init_nss_bw_capa(&sta->deflink,
+                                              &sdata->deflink.conf->chanreq.oper);
                rate_control_rate_init(&sta->deflink);
                if (sta->sta.deflink.rx_nss != rx_nss)
                        changed |= IEEE80211_RC_NSS_CHANGED;