net: optimize csum_replace2()
authorEric Dumazet <edumazet@google.com>
Mon, 24 Mar 2014 02:51:36 +0000 (19:51 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Mar 2014 04:18:44 +0000 (00:18 -0400)
commit99f0b958b194f7d88973f1c2190d207e0a2c7e79
treef76073a45af1840a773084b039c53f7b7db58fb5
parent860b4042ddec744de52461f91c869630b1bb23c2
net: optimize csum_replace2()

When changing one 16bit value by another in IP header, we can adjust
the IP checksum by doing a simple operation described in RFC 1624, as
reminded by David.

csum_partial() is a complex function on x86_64, not really suited for
small number of checksummed bytes.

I spotted csum_partial() being in the top 20 most consuming functions
(more than 1 %) in a GRO workload, which was rather unexpected.

The caller was inet_gro_complete() doing a csum_replace2() when
building the new IP header for the GRO packet.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/checksum.h