diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-05-05 13:13:37 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-05-05 13:13:37 +0800 |
commit | b41e65f55a30b53bfaf609ed4f794428ae532db2 (patch) | |
tree | dc1e839e56d805ca704108f41505b409d6670139 /net | |
parent | c52149e0ea4b02a021e6ae528bc567479725ea79 (diff) | |
parent | 834125557e0a4e5afafee3caf79696078d0820ae (diff) |
Merge remote-tracking branch 'lts/linux-3.18.y' into linux-linaro-lsk-v3.18
Conflicts:
include/linux/compiler-gcc.h
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/tcp_cubic.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c index 20de0118c98e..9332ec123a6c 100644 --- a/net/ipv4/tcp_cubic.c +++ b/net/ipv4/tcp_cubic.c @@ -154,6 +154,27 @@ static void bictcp_init(struct sock *sk) tcp_sk(sk)->snd_ssthresh = initial_ssthresh; } +static void bictcp_cwnd_event(struct sock *sk, enum tcp_ca_event event) +{ + if (event == CA_EVENT_TX_START) { + struct bictcp *ca = inet_csk_ca(sk); + u32 now = tcp_time_stamp; + s32 delta; + + delta = now - tcp_sk(sk)->lsndtime; + + /* We were application limited (idle) for a while. + * Shift epoch_start to keep cwnd growth to cubic curve. + */ + if (ca->epoch_start && delta > 0) { + ca->epoch_start += delta; + if (after(ca->epoch_start, now)) + ca->epoch_start = now; + } + return; + } +} + /* calculate the cubic root of x using a table lookup followed by one * Newton-Raphson iteration. * Avg err ~= 0.195% @@ -440,6 +461,7 @@ static struct tcp_congestion_ops cubictcp __read_mostly = { .cong_avoid = bictcp_cong_avoid, .set_state = bictcp_state, .undo_cwnd = bictcp_undo_cwnd, + .cwnd_event = bictcp_cwnd_event, .pkts_acked = bictcp_acked, .owner = THIS_MODULE, .name = "cubic", |