Thread (6 messages) 6 messages, 4 authors, 2018-03-29

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.h
b/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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help