summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm/checksum.h
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@ozlabs.org>2016-11-03 06:15:42 +0100
committerMichael Ellerman <mpe@ellerman.id.au>2017-01-25 03:34:18 +0100
commitd4fde568a34a93897dfb9ae64cfe9dda9d5c908c (patch)
tree88beaa27d42bc3b780167930f79129ecd29fab38 /arch/powerpc/include/asm/checksum.h
parentpowerpc/64: Fix checksum folding in csum_tcpudp_nofold and ip_fast_csum_nofold (diff)
downloadlinux-d4fde568a34a93897dfb9ae64cfe9dda9d5c908c.tar.xz
linux-d4fde568a34a93897dfb9ae64cfe9dda9d5c908c.zip
powerpc/64: Use optimized checksum routines on little-endian
Currently we have optimized hand-coded assembly checksum routines for big-endian 64-bit systems, but for little-endian we use the generic C routines. This modifies the optimized routines to work for little-endian. With this, we no longer need to enable CONFIG_GENERIC_CSUM. This also fixes a couple of comments in checksum_64.S so they accurately reflect what the associated instruction does. Signed-off-by: Paul Mackerras <paulus@ozlabs.org> [mpe: Use the more common __BIG_ENDIAN__] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/include/asm/checksum.h')
-rw-r--r--arch/powerpc/include/asm/checksum.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/checksum.h b/arch/powerpc/include/asm/checksum.h
index 5b1a6e39afa7..4e63787dc3be 100644
--- a/arch/powerpc/include/asm/checksum.h
+++ b/arch/powerpc/include/asm/checksum.h
@@ -70,7 +70,11 @@ static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, __u32 len,
s += (__force u32)saddr;
s += (__force u32)daddr;
+#ifdef __BIG_ENDIAN__
s += proto + len;
+#else
+ s += (proto + len) << 8;
+#endif
return (__force __wsum) from64to32(s);
#else
__asm__("\n\