On Fri, 21 Dec 2007, Eric Dumazet wrote:

Because tot_len is signed in tcp_v6_send_ack(), tot_len/4 forces compiler
to emit an integer divide, while we can help it to use a right shift,
less expensive.

Can't you just change tot_len to unsigned here? It's just sizeof and some positive constants added...

--
i.
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 0268e11..92f0fda 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1124,7 +1124,7 @@ static void tcp_v6_send_ack(struct tcp_timewait_sock *tw,
        memset(t1, 0, sizeof(*t1));
        t1->dest = th->source;
        t1->source = th->dest;
-       t1->doff = tot_len/4;
+       t1->doff = tot_len >> 2;
        t1->seq = htonl(seq);
        t1->ack_seq = htonl(ack);
        t1->ack = 1;

Reply via email to