X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=lib%2Fchecksum.c;h=62282bba0e51d0bb2983a1ec517f8eac4c3251bb;hp=8df2f91e6d98efff3b6c6c704a697a9cb9b31bfa;hb=f8c5af060edec5c5d8277b162a49cd53c780b247;hpb=bdc2209fd246820de2816691ac0e82600885e1a8 diff --git a/lib/checksum.c b/lib/checksum.c index 8df2f91e6d98..62282bba0e51 100644 --- a/lib/checksum.c +++ b/lib/checksum.c @@ -179,6 +179,15 @@ csum_partial_copy(const void *src, void *dst, int len, __wsum sum) EXPORT_SYMBOL(csum_partial_copy); #ifndef csum_tcpudp_nofold +static inline u32 from64to32(u64 x) +{ + /* add up 32-bit and 32-bit for 32+c bit */ + x = (x & 0xffffffff) + (x >> 32); + /* add up carry.. */ + x = (x & 0xffffffff) + (x >> 32); + return (u32)x; +} + __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, unsigned short proto, @@ -193,8 +202,7 @@ __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, #else s += (proto + len) << 8; #endif - s += (s >> 32); - return (__force __wsum)s; + return (__force __wsum)from64to32(s); } EXPORT_SYMBOL(csum_tcpudp_nofold); #endif