Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+20 −2
Original line number Original line Diff line number Diff line
@@ -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;
	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;
			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)
	/* 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_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;
			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)
	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;
+1 −0
Original line number Original line Diff line number Diff line
@@ -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 {