aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/ath/561-ath9k-dynack-set-ackto-to-max-timeout-in-ath_dynack_.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/ath/561-ath9k-dynack-set-ackto-to-max-timeout-in-ath_dynack_.patch')
-rw-r--r--package/kernel/mac80211/patches/ath/561-ath9k-dynack-set-ackto-to-max-timeout-in-ath_dynack_.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/ath/561-ath9k-dynack-set-ackto-to-max-timeout-in-ath_dynack_.patch b/package/kernel/mac80211/patches/ath/561-ath9k-dynack-set-ackto-to-max-timeout-in-ath_dynack_.patch
new file mode 100644
index 0000000000..5b75096e19
--- /dev/null
+++ b/package/kernel/mac80211/patches/ath/561-ath9k-dynack-set-ackto-to-max-timeout-in-ath_dynack_.patch
@@ -0,0 +1,78 @@
+From cc783bfa67e87d2e6206f7626b7bbb74d5c5f269 Mon Sep 17 00:00:00 2001
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Tue, 20 Aug 2019 18:20:22 +0200
+Subject: [PATCH 4/4] ath9k: dynack: set ackto to max timeout in
+ ath_dynack_reset
+
+Initialize acktimeout to the maximum configurable value in
+ath_dynack_reset in order to not disconnect long distance static links
+enabling dynack and even to take care of possible errors configuring
+a static timeout. Moreover initialize station timeout value to the current
+acktimeout value
+
+Tested-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+---
+ drivers/net/wireless/ath/ath9k/dynack.c | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/dynack.c b/drivers/net/wireless/ath/ath9k/dynack.c
+index fe9181533de3..f786be04d0ac 100644
+--- a/drivers/net/wireless/ath/ath9k/dynack.c
++++ b/drivers/net/wireless/ath/ath9k/dynack.c
+@@ -321,11 +321,9 @@ EXPORT_SYMBOL(ath_dynack_sample_ack_ts);
+ */
+ void ath_dynack_node_init(struct ath_hw *ah, struct ath_node *an)
+ {
+- /* ackto = slottime + sifs + air delay */
+- u32 ackto = 9 + 16 + 64;
+ struct ath_dynack *da = &ah->dynack;
+
+- an->ackto = ackto;
++ an->ackto = da->ackto;
+
+ spin_lock(&da->qlock);
+ list_add_tail(&an->list, &da->nodes);
+@@ -356,20 +354,26 @@ EXPORT_SYMBOL(ath_dynack_node_deinit);
+ */
+ void ath_dynack_reset(struct ath_hw *ah)
+ {
+- /* ackto = slottime + sifs + air delay */
+- u32 ackto = 9 + 16 + 64;
+ struct ath_dynack *da = &ah->dynack;
++ struct ath_node *an;
++
++ spin_lock_bh(&da->qlock);
+
+ da->lto = jiffies + COMPUTE_TO;
+- da->ackto = ackto;
+
+ da->st_rbf.t_rb = 0;
+ da->st_rbf.h_rb = 0;
+ da->ack_rbf.t_rb = 0;
+ da->ack_rbf.h_rb = 0;
+
++ da->ackto = ath_dynack_get_max_to(ah);
++ list_for_each_entry(an, &da->nodes, list)
++ an->ackto = da->ackto;
++
+ /* init acktimeout */
+- ath_dynack_set_timeout(ah, ackto);
++ ath_dynack_set_timeout(ah, da->ackto);
++
++ spin_unlock_bh(&da->qlock);
+ }
+ EXPORT_SYMBOL(ath_dynack_reset);
+
+@@ -386,6 +390,8 @@ void ath_dynack_init(struct ath_hw *ah)
+
+ spin_lock_init(&da->qlock);
+ INIT_LIST_HEAD(&da->nodes);
++ /* ackto = slottime + sifs + air delay */
++ da->ackto = 9 + 16 + 64;
+
+ ah->hw->wiphy->features |= NL80211_FEATURE_ACKTO_ESTIMATION;
+ }
+--
+2.17.1
+