From dd4b8a24a15ab86b68ad11295d5d1220ef7c0d06 Mon Sep 17 00:00:00 2001 From: Koen Vandeputte Date: Wed, 28 Aug 2019 12:12:41 +0200 Subject: ath9k: backport dynack improvements Close cooperation with Lorenzo Bianconi resulted in these patches which fix all remaining seen issues when using dynack. Fix link losses when: - Late Ack's are not seen or not present - switching from too low static coverage class to dynack on a live link These are fixed by setting the Ack Timeout/Slottime to the max possible value for the currently used channel width when a new station has been discovered. When traffic flows, dynack is able to adjust to optimal values within a few packets received (typically < 1 second) These changes have been thoroughly tested on ~60 offshore devices all interconnected using mesh over IBSS and dynack enabled on all. Distances between devices varied from <100m up to ~35km Signed-off-by: Koen Vandeputte Signed-off-by: Lorenzo Bianconi (cherry picked from commit f6e8ba0238fe349b7529357793e2fb18635819ed) --- ...k-properly-set-last-timeout-timestamp-in-.patch | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 package/kernel/mac80211/patches/ath/559-ath9k-dynack-properly-set-last-timeout-timestamp-in-.patch (limited to 'package/kernel/mac80211/patches/ath/559-ath9k-dynack-properly-set-last-timeout-timestamp-in-.patch') diff --git a/package/kernel/mac80211/patches/ath/559-ath9k-dynack-properly-set-last-timeout-timestamp-in-.patch b/package/kernel/mac80211/patches/ath/559-ath9k-dynack-properly-set-last-timeout-timestamp-in-.patch new file mode 100644 index 0000000000..9504af1419 --- /dev/null +++ b/package/kernel/mac80211/patches/ath/559-ath9k-dynack-properly-set-last-timeout-timestamp-in-.patch @@ -0,0 +1,32 @@ +From e5b56ce50eab31d24df6a70cf025db3acc4aa3ac Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Tue, 20 Aug 2019 18:20:20 +0200 +Subject: [PATCH 2/4] ath9k: dynack: properly set last timeout timestamp in + ath_dynack_reset + +Add compute timeout to last computation timestamp in +ath_dynack_reset in order to not run ath_dynack_compute_ackto +immediately + +Tested-by: Koen Vandeputte +Signed-off-by: Lorenzo Bianconi +--- + drivers/net/wireless/ath/ath9k/dynack.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/wireless/ath/ath9k/dynack.c b/drivers/net/wireless/ath/ath9k/dynack.c +index 38dbe25919f7..398ea872751f 100644 +--- a/drivers/net/wireless/ath/ath9k/dynack.c ++++ b/drivers/net/wireless/ath/ath9k/dynack.c +@@ -338,7 +338,7 @@ void ath_dynack_reset(struct ath_hw *ah) + u32 ackto = 9 + 16 + 64; + struct ath_dynack *da = &ah->dynack; + +- da->lto = jiffies; ++ da->lto = jiffies + COMPUTE_TO; + da->ackto = ackto; + + da->st_rbf.t_rb = 0; +-- +2.17.1 + -- cgit v1.2.3