Search Linux Wireless

Re: [PATCH 2/2] ath9k: Change rate control to use legacy rate as last MRR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Aug 20, 2011 at 10:30:56PM +0800, Adrian Chadd wrote:
> Is this going to interfere with aggregation, which assumes (iirc) all
> rates in the aggregate rate choice are HT?
>
The aggregation is only formed if the first frame from tid is not legacy rated.
And I send another patch "ath9k: Send legacy rated frames as unaggregated" that
does not include legacy frames in aggr.

--
Rajkumar
> 
> On 20 August 2011 19:52, Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx> wrote:
> > In congested network, having all rate reties at MCS rates
> > is failing to transmit the frame offenly. By the time reaching
> > the success rate set, the application gets timed out. One such
> > scenario is that authentication time out during 4-Way handshake.
> > This patch uses a legacy rate as last retry sequnce for
> > unaggregated frames or if the first selected rate's PER is ~80%
> > of max limit. And also observed from the tx status that the frame
> > was trasmitted successfully by using legacy rates.
> >
> > Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
> > ---
> >  drivers/net/wireless/ath/ath9k/rc.c |   34 +++++++++++++++++++++++++++-------
> >  1 files changed, 27 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
> > index 9e3649a..4f13018 100644
> > --- a/drivers/net/wireless/ath/ath9k/rc.c
> > +++ b/drivers/net/wireless/ath/ath9k/rc.c
> > @@ -603,7 +603,8 @@ static u8 ath_rc_setvalid_htrates(struct ath_rate_priv *ath_rc_priv,
> >  static u8 ath_rc_get_highest_rix(struct ath_softc *sc,
> >                                 struct ath_rate_priv *ath_rc_priv,
> >                                 const struct ath_rate_table *rate_table,
> > -                                int *is_probing)
> > +                                int *is_probing,
> > +                                bool legacy)
> >  {
> >        u32 best_thruput, this_thruput, now_msec;
> >        u8 rate, next_rate, best_rate, maxindex, minindex;
> > @@ -624,6 +625,8 @@ static u8 ath_rc_get_highest_rix(struct ath_softc *sc,
> >                u8 per_thres;
> >
> >                rate = ath_rc_priv->valid_rate_index[index];
> > +               if (legacy && !(rate_table->info[rate].rate_flags & RC_LEGACY))
> > +                       continue;
> >                if (rate > ath_rc_priv->rate_max_phy)
> >                        continue;
> >
> > @@ -767,7 +770,7 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
> >        struct ieee80211_tx_rate *rates = tx_info->control.rates;
> >        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
> >        __le16 fc = hdr->frame_control;
> > -       u8 try_per_rate, i = 0, rix;
> > +       u8 try_per_rate, i = 0, rix, high_rix;
> >        int is_probe = 0;
> >
> >        if (rate_control_send_low(sta, priv_sta, txrc))
> > @@ -786,7 +789,9 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
> >        try_per_rate = 4;
> >
> >        rate_table = ath_rc_priv->rate_table;
> > -       rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe);
> > +       rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table,
> > +                                    &is_probe, false);
> > +       high_rix = rix;
> >
> >        /*
> >         * If we're in HT mode and both us and our peer supports LDPC.
> > @@ -822,10 +827,7 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
> >        }
> >
> >        /* Fill in the other rates for multirate retry */
> > -       for ( ; i < 4; i++) {
> > -               /* Use twice the number of tries for the last MRR segment. */
> > -               if (i + 1 == 4)
> > -                       try_per_rate = 8;
> > +       for ( ; i < 3; i++) {
> >
> >                ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix);
> >                /* All other rates in the series have RTS enabled */
> > @@ -833,6 +835,24 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
> >                                       try_per_rate, rix, 1);
> >        }
> >
> > +       /* Use twice the number of tries for the last MRR segment. */
> > +       try_per_rate = 8;
> > +
> > +       /*
> > +        * Use a legacy rate as last retry to ensure that the frame
> > +        * is tried in both MCS and legacy rates.
> > +        */
> > +       if ((rates[2].flags & IEEE80211_TX_RC_MCS) &&
> > +           (!(tx_info->flags & IEEE80211_TX_CTL_AMPDU) ||
> > +           (ath_rc_priv->per[high_rix] > 45)))
> > +               rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table,
> > +                               &is_probe, true);
> > +       else
> > +               ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix);
> > +
> > +       /* All other rates in the series have RTS enabled */
> > +       ath_rc_rate_set_series(rate_table, &rates[i], txrc,
> > +                              try_per_rate, rix, 1);
> >        /*
> >         * NB:Change rate series to enable aggregation when operating
> >         * at lower MCS rates. When first rate in series is MCS2
> > --
> > 1.7.6
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux