From 0cc5cfbce8fe3a2227abb431cde7d9e498a5d702 Mon Sep 17 00:00:00 2001 From: Heiko Carstens Date: Fri, 11 Sep 2009 10:28:32 +0200 Subject: [PATCH] --- yaml --- r: 157445 b: refs/heads/master c: 04efc3be767cfed0d348fd598eba8fe5f5bf5fe6 h: refs/heads/master i: 157443: b588184273c6fc5d029651db03a9ee49db6ae613 v: v3 --- [refs] | 2 +- trunk/arch/s390/include/asm/checksum.h | 25 ++++--------------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/[refs] b/[refs] index ec92465e6c1d..e188dcc5c7b8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 05e7ff7da78bad3edc1290ed86b4a37da72ced62 +refs/heads/master: 04efc3be767cfed0d348fd598eba8fe5f5bf5fe6 diff --git a/trunk/arch/s390/include/asm/checksum.h b/trunk/arch/s390/include/asm/checksum.h index d5a8e7c1477c..6c00f6800a34 100644 --- a/trunk/arch/s390/include/asm/checksum.h +++ b/trunk/arch/s390/include/asm/checksum.h @@ -78,28 +78,11 @@ csum_partial_copy_nocheck (const void *src, void *dst, int len, __wsum sum) */ static inline __sum16 csum_fold(__wsum sum) { -#ifndef __s390x__ - register_pair rp; + u32 csum = (__force u32) sum; - asm volatile( - " slr %N1,%N1\n" /* %0 = H L */ - " lr %1,%0\n" /* %0 = H L, %1 = H L 0 0 */ - " srdl %1,16\n" /* %0 = H L, %1 = 0 H L 0 */ - " alr %1,%N1\n" /* %0 = H L, %1 = L H L 0 */ - " alr %0,%1\n" /* %0 = H+L+C L+H */ - " srl %0,16\n" /* %0 = H+L+C */ - : "+&d" (sum), "=d" (rp) : : "cc"); -#else /* __s390x__ */ - asm volatile( - " sr 3,3\n" /* %0 = H*65536 + L */ - " lr 2,%0\n" /* %0 = H L, 2/3 = H L / 0 0 */ - " srdl 2,16\n" /* %0 = H L, 2/3 = 0 H / L 0 */ - " alr 2,3\n" /* %0 = H L, 2/3 = L H / L 0 */ - " alr %0,2\n" /* %0 = H+L+C L+H */ - " srl %0,16\n" /* %0 = H+L+C */ - : "+&d" (sum) : : "cc", "2", "3"); -#endif /* __s390x__ */ - return (__force __sum16) ~sum; + csum += (csum >> 16) + (csum << 16); + csum >>= 16; + return (__force __sum16) ~csum; } /*