mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 01:11:14 +00:00
bf6f7cf29b
The removed patches were applied upstream. Remove the 300-mac80211-optimize-skb-resizing.patch. This patch was not applied upstream, but it conflicts with upstream changes and needs bigger changes. It was applied with Felix to remove this patch for now. It should be reworked and then send upstream later. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
68 lines
1.7 KiB
Diff
68 lines
1.7 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Sat, 26 Dec 2020 19:08:19 +0100
|
|
Subject: [PATCH] mac80211: minstrel_ht: improve ampdu length estimation
|
|
|
|
If the driver does not report A-MPDU length, estimate it based on the rate.
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/net/mac80211/rc80211_minstrel_ht.c
|
|
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
|
@@ -382,13 +382,37 @@ minstrel_get_ratestats(struct minstrel_h
|
|
return &mi->groups[index / MCS_GROUP_RATES].rates[index % MCS_GROUP_RATES];
|
|
}
|
|
|
|
+static inline int
|
|
+minstrel_get_duration(int index)
|
|
+{
|
|
+ const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES];
|
|
+ unsigned int duration = group->duration[index % MCS_GROUP_RATES];
|
|
+ return duration << group->shift;
|
|
+}
|
|
+
|
|
static unsigned int
|
|
minstrel_ht_avg_ampdu_len(struct minstrel_ht_sta *mi)
|
|
{
|
|
- if (!mi->avg_ampdu_len)
|
|
- return AVG_AMPDU_SIZE;
|
|
+ int duration;
|
|
+
|
|
+ if (mi->avg_ampdu_len)
|
|
+ return MINSTREL_TRUNC(mi->avg_ampdu_len);
|
|
+
|
|
+ if (minstrel_ht_is_legacy_group(mi->max_tp_rate[0] / MCS_GROUP_RATES))
|
|
+ return 1;
|
|
+
|
|
+ duration = minstrel_get_duration(mi->max_tp_rate[0]);
|
|
|
|
- return MINSTREL_TRUNC(mi->avg_ampdu_len);
|
|
+ if (duration > 400 * 1000)
|
|
+ return 2;
|
|
+
|
|
+ if (duration > 250 * 1000)
|
|
+ return 4;
|
|
+
|
|
+ if (duration > 150 * 1000)
|
|
+ return 8;
|
|
+
|
|
+ return 16;
|
|
}
|
|
|
|
/*
|
|
@@ -588,14 +612,6 @@ minstrel_ht_prob_rate_reduce_streams(str
|
|
}
|
|
}
|
|
|
|
-static inline int
|
|
-minstrel_get_duration(int index)
|
|
-{
|
|
- const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES];
|
|
- unsigned int duration = group->duration[index % MCS_GROUP_RATES];
|
|
- return duration << group->shift;
|
|
-}
|
|
-
|
|
static bool
|
|
minstrel_ht_probe_group(struct minstrel_ht_sta *mi, const struct mcs_group *tp_group,
|
|
int tp_idx, const struct mcs_group *group)
|