[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1395410195.6441.6.camel@edumazet-glaptop2.roam.corp.google.com>
Date: Fri, 21 Mar 2014 06:56:35 -0700
From: Eric Dumazet <eric.dumazet@...il.com>
To: Andi Kleen <andi@...stfloor.org>
Cc: "H. Peter Anvin" <hpa@...or.com>,
Patrick McHardy <kaber@...sh.net>,
Herbert Xu <herbert@...dor.apana.org.au>,
"H.K. Jerry Chu" <hkchu@...gle.com>,
Michael Dalton <mwdalton@...gle.com>,
netdev <netdev@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [RFC] csum experts, csum_replace2() is too expensive
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 netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists