Re: [RFC] csum experts, csum_replace2() is too expensive

From: Eric Dumazet
Date: Fri Mar 21 2014 - 09:56:49 EST


On Fri, 2014-03-21 at 06:47 -0700, Eric Dumazet wrote:

> Another idea would be to move the ip_fast_csum() call at the end of
> inet_gro_complete()
>
> I'll try this :
>
> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
> index 8c54870db792..0ca8f350a532 100644
> --- a/net/ipv4/af_inet.c
> +++ b/net/ipv4/af_inet.c
> @@ -1434,8 +1434,8 @@ static int inet_gro_complete(struct sk_buff *skb, int nhoff)
> int proto = iph->protocol;
> int err = -ENOSYS;
>
> - csum_replace2(&iph->check, iph->tot_len, newlen);
> iph->tot_len = newlen;
> + iph->check = 0;
>
> rcu_read_lock();
> ops = rcu_dereference(inet_offloads[proto]);
> @@ -1447,6 +1447,7 @@ static int inet_gro_complete(struct sk_buff *skb, int nhoff)
> * inet_gro_receive().
> */
> err = ops->callbacks.gro_complete(skb, nhoff + sizeof(*iph));
> + iph->check = ip_fast_csum((u8 *)iph, 5);
>
> out_unlock:
> rcu_read_unlock();
>

This doesn't help... same stall.

Looks like the best way is to use some 16 bit loads in ip_fast_csum()
for the ihl=5 case.



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/