diff --git a/include/kernel-version.mk b/include/kernel-version.mk index b64570b2fe..de5d1a7c42 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -6,13 +6,13 @@ ifdef CONFIG_TESTING_KERNEL KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER) endif -LINUX_VERSION-4.9 = .269 -LINUX_VERSION-4.14 = .233 -LINUX_VERSION-4.19 = .191 +LINUX_VERSION-4.9 = .270 +LINUX_VERSION-4.14 = .234 +LINUX_VERSION-4.19 = .192 -LINUX_KERNEL_HASH-4.9.269 = 7971ff0995119c446125d5949faab717a2d16e6a9ed0bd8350139a98187fcfde -LINUX_KERNEL_HASH-4.14.233 = 46c8dd7281d7b15d32ffbdf75281aeb1dde9da7aa963560dd14ee6cdd09f116b -LINUX_KERNEL_HASH-4.19.191 = b526bb70f18ab3fd4bae2bb31dd278f91b13a671b5137dbfb71580b47f3ea9c9 +LINUX_KERNEL_HASH-4.9.270 = c32b0026b6d7b06fdba6d1712756ddec7d5d64b351f6dcd90b49287aff526532 +LINUX_KERNEL_HASH-4.14.234 = 2b58cc4ecfef3ebc75783ccef10c71f7beebb26edaf7419f55a96183755a98d7 +LINUX_KERNEL_HASH-4.19.192 = 074dcda77c7c413dece370b3cf8713997d909a8c06724c910ae23cc9c96f0099 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) diff --git a/target/linux/generic/backport-4.14/605-0013-tcp_bbr-fix-quantization-code-to-not-raise-cwnd-if-not-pr.patch b/target/linux/generic/backport-4.14/605-0013-tcp_bbr-fix-quantization-code-to-not-raise-cwnd-if-not-pr.patch new file mode 100644 index 0000000000..e44916731e --- /dev/null +++ b/target/linux/generic/backport-4.14/605-0013-tcp_bbr-fix-quantization-code-to-not-raise-cwnd-if-not-pr.patch @@ -0,0 +1,65 @@ +From 6b3656a60f2067738d1a423328199720806f0c44 Mon Sep 17 00:00:00 2001 +From: "Kevin(Yudong) Yang" +Date: Thu, 26 Sep 2019 10:30:05 -0400 +Subject: [PATCH] tcp_bbr: fix quantization code to not raise cwnd if not + probing bandwidth + +There was a bug in the previous logic that attempted to ensure gain cycling +gets inflight above BDP even for small BDPs. This code correctly raised and +lowered target inflight values during the gain cycle. And this code +correctly ensured that cwnd was raised when probing bandwidth. However, it +did not correspondingly ensure that cwnd was *not* raised in this way when +*not* probing for bandwidth. The result was that small-BDP flows that were +always cwnd-bound could go for many cycles with a fixed cwnd, and not probe +or yield bandwidth at all. This meant that multiple small-BDP flows could +fail to converge in their bandwidth allocations. + +Fixes: 3c346b233c68 ("tcp_bbr: fix bw probing to raise in-flight data for very small BDPs") +Signed-off-by: Kevin(Yudong) Yang +Acked-by: Neal Cardwell +Acked-by: Yuchung Cheng +Acked-by: Soheil Hassas Yeganeh +Acked-by: Priyaranjan Jha +Signed-off-by: David S. Miller +--- + net/ipv4/tcp_bbr.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/net/ipv4/tcp_bbr.c ++++ b/net/ipv4/tcp_bbr.c +@@ -386,7 +386,7 @@ static u32 bbr_bdp(struct sock *sk, u32 + * which allows 2 outstanding 2-packet sequences, to try to keep pipe + * full even with ACK-every-other-packet delayed ACKs. + */ +-static u32 bbr_quantization_budget(struct sock *sk, u32 cwnd, int gain) ++static u32 bbr_quantization_budget(struct sock *sk, u32 cwnd) + { + struct bbr *bbr = inet_csk_ca(sk); + +@@ -397,7 +397,7 @@ static u32 bbr_quantization_budget(struc + cwnd = (cwnd + 1) & ~1U; + + /* Ensure gain cycling gets inflight above BDP even for small BDPs. */ +- if (bbr->mode == BBR_PROBE_BW && gain > BBR_UNIT) ++ if (bbr->mode == BBR_PROBE_BW && bbr->cycle_idx == 0) + cwnd += 2; + + return cwnd; +@@ -409,7 +409,7 @@ static u32 bbr_inflight(struct sock *sk, + u32 inflight; + + inflight = bbr_bdp(sk, bw, gain); +- inflight = bbr_quantization_budget(sk, inflight, gain); ++ inflight = bbr_quantization_budget(sk, inflight); + + return inflight; + } +@@ -496,7 +496,7 @@ static void bbr_set_cwnd(struct sock *sk + * due to aggregation (of data and/or ACKs) visible in the ACK stream. + */ + target_cwnd += bbr_ack_aggregation_cwnd(sk); +- target_cwnd = bbr_quantization_budget(sk, target_cwnd, gain); ++ target_cwnd = bbr_quantization_budget(sk, target_cwnd); + + /* If we're below target cwnd, slow start cwnd toward target cwnd. */ + if (bbr_full_bw_reached(sk)) /* only cut cwnd if we filled the pipe */ diff --git a/target/linux/generic/backport-4.19/605-tcp_bbr-fix-quantization-code-to-not-raise-cwnd-if-not-pr.patch b/target/linux/generic/backport-4.19/605-tcp_bbr-fix-quantization-code-to-not-raise-cwnd-if-not-pr.patch new file mode 100644 index 0000000000..e44916731e --- /dev/null +++ b/target/linux/generic/backport-4.19/605-tcp_bbr-fix-quantization-code-to-not-raise-cwnd-if-not-pr.patch @@ -0,0 +1,65 @@ +From 6b3656a60f2067738d1a423328199720806f0c44 Mon Sep 17 00:00:00 2001 +From: "Kevin(Yudong) Yang" +Date: Thu, 26 Sep 2019 10:30:05 -0400 +Subject: [PATCH] tcp_bbr: fix quantization code to not raise cwnd if not + probing bandwidth + +There was a bug in the previous logic that attempted to ensure gain cycling +gets inflight above BDP even for small BDPs. This code correctly raised and +lowered target inflight values during the gain cycle. And this code +correctly ensured that cwnd was raised when probing bandwidth. However, it +did not correspondingly ensure that cwnd was *not* raised in this way when +*not* probing for bandwidth. The result was that small-BDP flows that were +always cwnd-bound could go for many cycles with a fixed cwnd, and not probe +or yield bandwidth at all. This meant that multiple small-BDP flows could +fail to converge in their bandwidth allocations. + +Fixes: 3c346b233c68 ("tcp_bbr: fix bw probing to raise in-flight data for very small BDPs") +Signed-off-by: Kevin(Yudong) Yang +Acked-by: Neal Cardwell +Acked-by: Yuchung Cheng +Acked-by: Soheil Hassas Yeganeh +Acked-by: Priyaranjan Jha +Signed-off-by: David S. Miller +--- + net/ipv4/tcp_bbr.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/net/ipv4/tcp_bbr.c ++++ b/net/ipv4/tcp_bbr.c +@@ -386,7 +386,7 @@ static u32 bbr_bdp(struct sock *sk, u32 + * which allows 2 outstanding 2-packet sequences, to try to keep pipe + * full even with ACK-every-other-packet delayed ACKs. + */ +-static u32 bbr_quantization_budget(struct sock *sk, u32 cwnd, int gain) ++static u32 bbr_quantization_budget(struct sock *sk, u32 cwnd) + { + struct bbr *bbr = inet_csk_ca(sk); + +@@ -397,7 +397,7 @@ static u32 bbr_quantization_budget(struc + cwnd = (cwnd + 1) & ~1U; + + /* Ensure gain cycling gets inflight above BDP even for small BDPs. */ +- if (bbr->mode == BBR_PROBE_BW && gain > BBR_UNIT) ++ if (bbr->mode == BBR_PROBE_BW && bbr->cycle_idx == 0) + cwnd += 2; + + return cwnd; +@@ -409,7 +409,7 @@ static u32 bbr_inflight(struct sock *sk, + u32 inflight; + + inflight = bbr_bdp(sk, bw, gain); +- inflight = bbr_quantization_budget(sk, inflight, gain); ++ inflight = bbr_quantization_budget(sk, inflight); + + return inflight; + } +@@ -496,7 +496,7 @@ static void bbr_set_cwnd(struct sock *sk + * due to aggregation (of data and/or ACKs) visible in the ACK stream. + */ + target_cwnd += bbr_ack_aggregation_cwnd(sk); +- target_cwnd = bbr_quantization_budget(sk, target_cwnd, gain); ++ target_cwnd = bbr_quantization_budget(sk, target_cwnd); + + /* If we're below target cwnd, slow start cwnd toward target cwnd. */ + if (bbr_full_bw_reached(sk)) /* only cut cwnd if we filled the pipe */