mac80211: minstrel_ht: fill all requested rates
authorPeter Seiderer <ps.report@gmx.net>
Sat, 2 Apr 2022 15:30:14 +0000 (17:30 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 16 May 2022 08:03:39 +0000 (10:03 +0200)
Fill all requested rates (in case of ath9k 4 rate slots are
available, so fill all 4 instead of only 3), improves throughput in
noisy environment.

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
Link: https://lore.kernel.org/r/20220402153014.31332-2-ps.report@gmx.net
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/rc80211_minstrel_ht.c

index 7b1f5c045e0646ff6c4af00a370218a7bc74b35a..273e63689e9a6d6064e77515cb18a37cc8f9b736 100644 (file)
@@ -1439,17 +1439,17 @@ minstrel_ht_update_rates(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
        /* Start with max_tp_rate[0] */
        minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_tp_rate[0]);
 
-       if (mp->hw->max_rates >= 3) {
-               /* At least 3 tx rates supported, use max_tp_rate[1] next */
-               minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_tp_rate[1]);
-       }
+       /* Fill up remaining, keep one entry for max_probe_rate */
+       for (; i < (mp->hw->max_rates - 1); i++)
+               minstrel_ht_set_rate(mp, mi, rates, i, mi->max_tp_rate[i]);
 
-       if (mp->hw->max_rates >= 2) {
+       if (i < mp->hw->max_rates)
                minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_prob_rate);
-       }
+
+       if (i < IEEE80211_TX_RATE_TABLE_SIZE)
+               rates->rate[i].idx = -1;
 
        mi->sta->max_rc_amsdu_len = minstrel_ht_get_max_amsdu_len(mi);
-       rates->rate[i].idx = -1;
        rate_control_set_rates(mp->hw, mi->sta, rates);
 }