X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fchecksum.c;h=62282bba0e51d0bb2983a1ec517f8eac4c3251bb;hb=fd435487db729e9485f3edcd3963fcc23054195f;hp=8df2f91e6d98efff3b6c6c704a697a9cb9b31bfa;hpb=a5d5a914770a81a1f775be2ee35b9fa8fd19d381;p=pandora-kernel.git 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