summaryrefslogtreecommitdiff
path: root/arch/powerpc/include/asm/checksum.h
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@ozlabs.org>2016-11-03 16:15:42 +1100
committerMichael Ellerman <mpe@ellerman.id.au>2017-01-25 13:34:18 +1100
commitd4fde568a34a93897dfb9ae64cfe9dda9d5c908c (patch)
tree88beaa27d42bc3b780167930f79129ecd29fab38 /arch/powerpc/include/asm/checksum.h
parentb492f7e4e07a28e706db26cf4943bb0911435426 (diff)
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\