mac80211: update minstrel_ht sample rate when probe is set
authorDaniel Halperin <dhalperi@cs.washington.edu>
Wed, 9 Mar 2011 11:10:18 +0000 (03:10 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 9 Mar 2011 21:10:58 +0000 (16:10 -0500)
Waiting until the status is received can cause the same rate to be
probed multiple times consecutively.

Cc: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Daniel Halperin <dhalperi@cs.washington.edu>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/rc80211_minstrel_ht.c

index 775cf15..bce14fb 100644 (file)
@@ -415,10 +415,8 @@ minstrel_ht_tx_status(void *priv, struct ieee80211_supported_band *sband,
                mi->sample_count--;
        }
 
-       if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) {
+       if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)
                mi->sample_packets += info->status.ampdu_len;
-               minstrel_next_sample_idx(mi);
-       }
 
        for (i = 0; !last; i++) {
                last = (i == IEEE80211_TX_MAX_RATES - 1) ||
@@ -551,13 +549,14 @@ minstrel_get_sample_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
        sample_idx = sample_table[mg->column][mg->index];
        mr = &mg->rates[sample_idx];
        sample_idx += mi->sample_group * MCS_GROUP_RATES;
+       minstrel_next_sample_idx(mi);
 
        /*
         * When not using MRR, do not sample if the probability is already
         * higher than 95% to avoid wasting airtime
         */
        if (!mp->has_mrr && (mr->probability > MINSTREL_FRAC(95, 100)))
-               goto next;
+               return -1;
 
        /*
         * Make sure that lower rates get sampled only occasionally,
@@ -566,17 +565,13 @@ minstrel_get_sample_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
        if (minstrel_get_duration(sample_idx) >
            minstrel_get_duration(mi->max_tp_rate)) {
                if (mr->sample_skipped < 20)
-                       goto next;
+                       return -1;
 
                if (mi->sample_slow++ > 2)
-                       goto next;
+                       return -1;
        }
 
        return sample_idx;
-
-next:
-       minstrel_next_sample_idx(mi);
-       return -1;
 }
 
 static void