diff options
| -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; |
