diff options
author | Paul Mackerras <paulus@ozlabs.org> | 2016-11-03 16:15:42 +1100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-01-25 13:34:18 +1100 |
commit | d4fde568a34a93897dfb9ae64cfe9dda9d5c908c (patch) | |
tree | 88beaa27d42bc3b780167930f79129ecd29fab38 /arch/powerpc/include/asm/checksum.h | |
parent | b492f7e4e07a28e706db26cf4943bb0911435426 (diff) | |
download | op-kernel-dev-d4fde568a34a93897dfb9ae64cfe9dda9d5c908c.zip op-kernel-dev-d4fde568a34a93897dfb9ae64cfe9dda9d5c908c.tar.gz |
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.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/checksum.h b/arch/powerpc/include/asm/checksum.h index 5b1a6e3..4e63787 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\ |