Re: [PATCH] powerpc/64: Fix checksum folding in csum_add
From: Paul Mackerras <hidden>
Date: 2018-03-28 20:40:31
On Tue, Mar 27, 2018 at 05:22:32PM +0200, LEROY Christophe wrote:
Shile Zhang [off-list ref] a écrit :quoted
fix the missed point in Paul's patch: "powerpc/64: Fix checksum folding in csum_tcpudp_nofold and ip_fast_csum_nofold" Signed-off-by: Shile Zhang <redacted> --- arch/powerpc/include/asm/checksum.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/arch/powerpc/include/asm/checksum.hb/arch/powerpc/include/asm/checksum.h index 5b1a6e3..430d038 100644--- a/arch/powerpc/include/asm/checksum.h +++ b/arch/powerpc/include/asm/checksum.h@@ -108,7 +108,7 @@ static inline __wsum csum_add(__wsum csum, __wsum addend)#ifdef __powerpc64__ res += (__force u64)addend; - return (__force __wsum)((u32)res + (res >> 32)); + return (__force __wsum) from64to32(res);Did you encounter a bug due to that ? As far as i understand, csum and addend are 32 bits so can't exceed 0xffffffff Then their sum won't exceed 0x1fffffffe. So the sum of upper and lower part won't carry
If the sum of the two halves was 0x1fffffffe, then that previously got truncated to 32 bits and returned as 0xfffffffe, which is wrong - the result should be 0xffffffff. Paul.