Commit 32aac18d authored by Andrea Bittau's avatar Andrea Bittau Committed by David S. Miller

[DCCP] CCID2: Code optimizations

These are code optimizations which are relevant when dealing with large
windows.  They are not coded the way I would like to, but they do the job for
the short-term.  This patch should be more neat.

Commiter note: Changed the seqno comparisions to use {after,before}48 to handle
               wrapping.
Signed-off-by: default avatarAndrea Bittau <a.bittau@cs.ucl.ac.uk>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
parent 58a5a7b9
...@@ -619,7 +619,17 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) ...@@ -619,7 +619,17 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
} }
ackno = DCCP_SKB_CB(skb)->dccpd_ack_seq; ackno = DCCP_SKB_CB(skb)->dccpd_ack_seq;
seqp = hctx->ccid2hctx_seqh->ccid2s_prev; if (after48(ackno, hctx->ccid2hctx_high_ack))
hctx->ccid2hctx_high_ack = ackno;
seqp = hctx->ccid2hctx_seqt;
while (before48(seqp->ccid2s_seq, ackno)) {
seqp = seqp->ccid2s_next;
if (seqp == hctx->ccid2hctx_seqh) {
seqp = hctx->ccid2hctx_seqh->ccid2s_prev;
break;
}
}
/* If in slow-start, cwnd can increase at most Ack Ratio / 2 packets for /* If in slow-start, cwnd can increase at most Ack Ratio / 2 packets for
* this single ack. I round up. * this single ack. I round up.
...@@ -697,7 +707,14 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) ...@@ -697,7 +707,14 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
/* The state about what is acked should be correct now /* The state about what is acked should be correct now
* Check for NUMDUPACK * Check for NUMDUPACK
*/ */
seqp = hctx->ccid2hctx_seqh->ccid2s_prev; seqp = hctx->ccid2hctx_seqt;
while (before48(seqp->ccid2s_seq, hctx->ccid2hctx_high_ack)) {
seqp = seqp->ccid2s_next;
if (seqp == hctx->ccid2hctx_seqh) {
seqp = hctx->ccid2hctx_seqh->ccid2s_prev;
break;
}
}
done = 0; done = 0;
while (1) { while (1) {
if (seqp->ccid2s_acked) { if (seqp->ccid2s_acked) {
...@@ -771,6 +788,7 @@ static int ccid2_hc_tx_init(struct ccid *ccid, struct sock *sk) ...@@ -771,6 +788,7 @@ static int ccid2_hc_tx_init(struct ccid *ccid, struct sock *sk)
hctx->ccid2hctx_lastrtt = 0; hctx->ccid2hctx_lastrtt = 0;
hctx->ccid2hctx_rpdupack = -1; hctx->ccid2hctx_rpdupack = -1;
hctx->ccid2hctx_last_cong = jiffies; hctx->ccid2hctx_last_cong = jiffies;
hctx->ccid2hctx_high_ack = 0;
hctx->ccid2hctx_rtotimer.function = &ccid2_hc_tx_rto_expire; hctx->ccid2hctx_rtotimer.function = &ccid2_hc_tx_rto_expire;
hctx->ccid2hctx_rtotimer.data = (unsigned long)sk; hctx->ccid2hctx_rtotimer.data = (unsigned long)sk;
......
...@@ -72,6 +72,7 @@ struct ccid2_hc_tx_sock { ...@@ -72,6 +72,7 @@ struct ccid2_hc_tx_sock {
int ccid2hctx_rpdupack; int ccid2hctx_rpdupack;
int ccid2hctx_sendwait; int ccid2hctx_sendwait;
unsigned long ccid2hctx_last_cong; unsigned long ccid2hctx_last_cong;
u64 ccid2hctx_high_ack;
}; };
struct ccid2_hc_rx_sock { struct ccid2_hc_rx_sock {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment