From: Tiezhu Yang > Sent: 08 March 2021 12:50 > > The asm code in csum_tcpudp_nofold() is performance-critical, I am sorry > for the poorly considered implementation about the performance influence > with GCC in the commit 198688edbf77 ("MIPS: Fix inline asm input/output > type mismatch in checksum.h used with Clang"). > > With this patch, we can build successfully by both GCC and Clang, > at the same time, we can avoid the potential performance influence > with GCC. > > Signed-off-by: Tiezhu Yang <yangtiezhu@xxxxxxxxxxx> > --- > arch/mips/include/asm/checksum.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/arch/mips/include/asm/checksum.h b/arch/mips/include/asm/checksum.h > index 1e6c135..64d353e 100644 > --- a/arch/mips/include/asm/checksum.h > +++ b/arch/mips/include/asm/checksum.h > @@ -130,7 +130,9 @@ static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, > __u32 len, __u8 proto, > __wsum sum) > { > +#ifdef __clang__ > unsigned long tmp = (__force unsigned long)sum; > +#endif What happens if you make the above: #ifdef __clang__ unsigned long tmp = (__force unsigned long)sum; #else __wsum tmp = sum; #endif and then leave the rest of the function the same for both compilers. Maybe do s/sum/sum_in/,s/tmp/sum/ to reduce the changes. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)