On 2019-12-10 13:20, Markus Theil wrote: > Before this patch, mt76 handled rx traffic for all TIDs equally, > when released from reorder buffer early. This patch uses an AC specific > reorder timeout, in order to release partial aggregated frames for voice > or video ACs earlier. For example, ath10k also uses AC specific reorder > timeouts (reported by firmware in that case). > > Signed-off-by: Markus Theil <markus.theil@xxxxxxxxxxxxx> > --- > v3: fix changelog > v2: use static const mapping arrays > > drivers/net/wireless/mediatek/mt76/agg-rx.c | 30 ++++++++++++++++++--- > drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ > 2 files changed, 28 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/agg-rx.c b/drivers/net/wireless/mediatek/mt76/agg-rx.c > index 53b5a4b2dcc5..572cf26b0fa1 100644 > --- a/drivers/net/wireless/mediatek/mt76/agg-rx.c > +++ b/drivers/net/wireless/mediatek/mt76/agg-rx.c > @@ -4,7 +4,27 @@ > */ > #include "mt76.h" > > -#define REORDER_TIMEOUT (HZ / 10) > +static unsigned long mt76_aggr_tid_to_timeo(u8 tidno) > +{ > + static const int ieee802_1d_to_ac[8] = { > + IEEE80211_AC_BE, > + IEEE80211_AC_BK, > + IEEE80211_AC_BK, > + IEEE80211_AC_BE, > + IEEE80211_AC_VI, > + IEEE80211_AC_VI, > + IEEE80211_AC_VO, > + IEEE80211_AC_VO > + }; > + static const int ac_to_timeout[] = { > + [IEEE80211_AC_VO] = HZ / 30, > + [IEEE80211_AC_VI] = HZ / 25, > + [IEEE80211_AC_BE] = HZ / 10, > + [IEEE80211_AC_BK] = HZ / 10 > + }; > + > + return ac_to_timeout[ieee802_1d_to_ac[tidno & 7]]; In the current implementation, voice traffic always runs without aggregation, so it does not need special timeout handling. Given that tid values 0-3 are BE/BK and you use the same timeout for those, you could simplify this function to: return HZ / (tidno >= 4 ? 25 : 10); - Felix