]> git.hungrycats.org Git - linux/commit
MIPS: Add 'memory' clobber to csum_ipv6_magic() inline assembler
authorGuenter Roeck <linux@roeck-us.net>
Sun, 11 Feb 2024 16:08:37 +0000 (08:08 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Feb 2024 07:55:02 +0000 (08:55 +0100)
commit8e89ac8852b5910c988152fae1a6b3707aaf11fa
tree398af68ac02cddf9a9cb26fa46fa8ecc162d7e3b
parent9bc718f6a56a12c4d9b71493dd7f2c1fedd51ffb
MIPS: Add 'memory' clobber to csum_ipv6_magic() inline assembler

[ Upstream commit d55347bfe4e66dce2e1e7501e5492f4af3e315f8 ]

After 'lib: checksum: Use aligned accesses for ip_fast_csum and
csum_ipv6_magic tests' was applied, the test_csum_ipv6_magic unit test
started failing for all mips platforms, both little and bit endian.
Oddly enough, adding debug code into test_csum_ipv6_magic() made the
problem disappear.

The gcc manual says:

"The "memory" clobber tells the compiler that the assembly code performs
 memory reads or writes to items other than those listed in the input
 and output operands (for example, accessing the memory pointed to by one
 of the input parameters)
"

This is definitely the case for csum_ipv6_magic(). Indeed, adding the
'memory' clobber fixes the problem.

Cc: Charlie Jenkins <charlie@rivosinc.com>
Cc: Palmer Dabbelt <palmer@rivosinc.com>
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Charlie Jenkins <charlie@rivosinc.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/mips/include/asm/checksum.h