RE: [PATCH] MIPS: Check __clang__ to avoid performance influence with GCC in csum_tcpudp_nofold()

From: David Laight
Date: Mon Mar 08 2021 - 11:53:07 EST


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)