diff --git a/arch/arm64/kernel/swp_emulate.c b/arch/arm64/kernel/swp_emulate.c index b1a176bdede3..508fd2edb8ab 100644 --- a/arch/arm64/kernel/swp_emulate.c +++ b/arch/arm64/kernel/swp_emulate.c @@ -40,12 +40,13 @@ static int swpb(u8 in, u8 *out, u8 *addr) { u8 _out; int res; - int err = 0; + int err; do { __asm__ __volatile__( "0: ldxrb %w1, %4\n" "1: stxrb %w0, %w3, %4\n" + " mov %w2, #0\n" "2:\n" " .section .fixup,\"ax\"\n" " .align 2\n" @@ -58,7 +59,7 @@ static int swpb(u8 in, u8 *out, u8 *addr) " .quad 1b, 3b\n" " .previous" : "=&r" (res), "=r" (_out), "=r" (err) - : "r" (in), "Q" (addr), "i" (-EFAULT) + : "r" (in), "Q" (*addr), "i" (-EFAULT) : "cc", "memory"); } while (err == 0 && res != 0); @@ -77,6 +78,7 @@ static int swp(u32 in, u32 *out, u32 *addr) __asm__ __volatile__( "0: ldxr %w1, %4\n" "1: stxr %w0, %w3, %4\n" + " mov %w2, #0\n" "2:\n" " .section .fixup,\"ax\"\n" " .align 2\n" @@ -89,7 +91,7 @@ static int swp(u32 in, u32 *out, u32 *addr) " .quad 1b, 3b\n" " .previous" : "=&r" (res), "=r" (_out), "=r" (err) - : "r" (in), "Q" (addr), "i" (-EFAULT) + : "r" (in), "Q" (*addr), "i" (-EFAULT) : "cc", "memory"); } while (err == 0 && res != 0);