diff options
Diffstat (limited to 'net/dccp')
-rw-r--r-- | net/dccp/ccids/ccid2.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c index b88da035865f..457dd3db7f41 100644 --- a/net/dccp/ccids/ccid2.c +++ b/net/dccp/ccids/ccid2.c | |||
@@ -199,6 +199,17 @@ static void ccid2_change_cwnd(struct ccid2_hc_tx_sock *hctx, int val) | |||
199 | hctx->ccid2hctx_cwnd = val; | 199 | hctx->ccid2hctx_cwnd = val; |
200 | } | 200 | } |
201 | 201 | ||
202 | static void ccid2_change_srtt(struct ccid2_hc_tx_sock *hctx, long val) | ||
203 | { | ||
204 | ccid2_pr_debug("change SRTT to %ld\n", val); | ||
205 | hctx->ccid2hctx_srtt = val; | ||
206 | } | ||
207 | |||
208 | static void ccid2_change_pipe(struct ccid2_hc_tx_sock *hctx, long val) | ||
209 | { | ||
210 | hctx->ccid2hctx_pipe = val; | ||
211 | } | ||
212 | |||
202 | static void ccid2_start_rto_timer(struct sock *sk); | 213 | static void ccid2_start_rto_timer(struct sock *sk); |
203 | 214 | ||
204 | static void ccid2_hc_tx_rto_expire(unsigned long data) | 215 | static void ccid2_hc_tx_rto_expire(unsigned long data) |
@@ -228,7 +239,7 @@ static void ccid2_hc_tx_rto_expire(unsigned long data) | |||
228 | ccid2_start_rto_timer(sk); | 239 | ccid2_start_rto_timer(sk); |
229 | 240 | ||
230 | /* adjust pipe, cwnd etc */ | 241 | /* adjust pipe, cwnd etc */ |
231 | hctx->ccid2hctx_pipe = 0; | 242 | ccid2_change_pipe(hctx, 0); |
232 | hctx->ccid2hctx_ssthresh = hctx->ccid2hctx_cwnd >> 1; | 243 | hctx->ccid2hctx_ssthresh = hctx->ccid2hctx_cwnd >> 1; |
233 | if (hctx->ccid2hctx_ssthresh < 2) | 244 | if (hctx->ccid2hctx_ssthresh < 2) |
234 | hctx->ccid2hctx_ssthresh = 2; | 245 | hctx->ccid2hctx_ssthresh = 2; |
@@ -274,7 +285,7 @@ static void ccid2_hc_tx_packet_sent(struct sock *sk, int more, int len) | |||
274 | 285 | ||
275 | BUG_ON(!hctx->ccid2hctx_sendwait); | 286 | BUG_ON(!hctx->ccid2hctx_sendwait); |
276 | hctx->ccid2hctx_sendwait = 0; | 287 | hctx->ccid2hctx_sendwait = 0; |
277 | hctx->ccid2hctx_pipe++; | 288 | ccid2_change_pipe(hctx, hctx->ccid2hctx_pipe + 1); |
278 | BUG_ON(hctx->ccid2hctx_pipe < 0); | 289 | BUG_ON(hctx->ccid2hctx_pipe < 0); |
279 | 290 | ||
280 | /* There is an issue. What if another packet is sent between | 291 | /* There is an issue. What if another packet is sent between |
@@ -470,11 +481,13 @@ static inline void ccid2_new_ack(struct sock *sk, | |||
470 | if (hctx->ccid2hctx_srtt == -1) { | 481 | if (hctx->ccid2hctx_srtt == -1) { |
471 | ccid2_pr_debug("R: %lu Time=%lu seq=%llu\n", | 482 | ccid2_pr_debug("R: %lu Time=%lu seq=%llu\n", |
472 | r, jiffies, seqp->ccid2s_seq); | 483 | r, jiffies, seqp->ccid2s_seq); |
473 | hctx->ccid2hctx_srtt = r; | 484 | ccid2_change_srtt(hctx, r); |
474 | hctx->ccid2hctx_rttvar = r >> 1; | 485 | hctx->ccid2hctx_rttvar = r >> 1; |
475 | } else { | 486 | } else { |
476 | /* RTTVAR */ | 487 | /* RTTVAR */ |
477 | long tmp = hctx->ccid2hctx_srtt - r; | 488 | long tmp = hctx->ccid2hctx_srtt - r; |
489 | long srtt; | ||
490 | |||
478 | if (tmp < 0) | 491 | if (tmp < 0) |
479 | tmp *= -1; | 492 | tmp *= -1; |
480 | 493 | ||
@@ -484,10 +497,12 @@ static inline void ccid2_new_ack(struct sock *sk, | |||
484 | hctx->ccid2hctx_rttvar += tmp; | 497 | hctx->ccid2hctx_rttvar += tmp; |
485 | 498 | ||
486 | /* SRTT */ | 499 | /* SRTT */ |
487 | hctx->ccid2hctx_srtt *= 7; | 500 | srtt = hctx->ccid2hctx_srtt; |
488 | hctx->ccid2hctx_srtt >>= 3; | 501 | srtt *= 7; |
502 | srtt >>= 3; | ||
489 | tmp = r >> 3; | 503 | tmp = r >> 3; |
490 | hctx->ccid2hctx_srtt += tmp; | 504 | srtt += tmp; |
505 | ccid2_change_srtt(hctx, srtt); | ||
491 | } | 506 | } |
492 | s = hctx->ccid2hctx_rttvar << 2; | 507 | s = hctx->ccid2hctx_rttvar << 2; |
493 | /* clock granularity is 1 when based on jiffies */ | 508 | /* clock granularity is 1 when based on jiffies */ |
@@ -523,7 +538,7 @@ static void ccid2_hc_tx_dec_pipe(struct sock *sk) | |||
523 | { | 538 | { |
524 | struct ccid2_hc_tx_sock *hctx = ccid2_hc_tx_sk(sk); | 539 | struct ccid2_hc_tx_sock *hctx = ccid2_hc_tx_sk(sk); |
525 | 540 | ||
526 | hctx->ccid2hctx_pipe--; | 541 | ccid2_change_pipe(hctx, hctx->ccid2hctx_pipe-1); |
527 | BUG_ON(hctx->ccid2hctx_pipe < 0); | 542 | BUG_ON(hctx->ccid2hctx_pipe < 0); |
528 | 543 | ||
529 | if (hctx->ccid2hctx_pipe == 0) | 544 | if (hctx->ccid2hctx_pipe == 0) |
@@ -749,7 +764,7 @@ static int ccid2_hc_tx_init(struct ccid *ccid, struct sock *sk) | |||
749 | 764 | ||
750 | hctx->ccid2hctx_sent = 0; | 765 | hctx->ccid2hctx_sent = 0; |
751 | hctx->ccid2hctx_rto = 3 * HZ; | 766 | hctx->ccid2hctx_rto = 3 * HZ; |
752 | hctx->ccid2hctx_srtt = -1; | 767 | ccid2_change_srtt(hctx, -1); |
753 | hctx->ccid2hctx_rttvar = -1; | 768 | hctx->ccid2hctx_rttvar = -1; |
754 | hctx->ccid2hctx_lastrtt = 0; | 769 | hctx->ccid2hctx_lastrtt = 0; |
755 | hctx->ccid2hctx_rpdupack = -1; | 770 | hctx->ccid2hctx_rpdupack = -1; |