|
|
@@ -121,6 +121,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
|
|
|
return -EFAULT;
|
|
|
|
|
|
asm volatile("// futex_atomic_cmpxchg_inatomic\n"
|
|
|
+ALTERNATIVE("nop", SET_PSTATE_PAN(0), ARM64_HAS_PAN, CONFIG_ARM64_PAN)
|
|
|
" prfm pstl1strm, %2\n"
|
|
|
"1: ldxr %w1, %2\n"
|
|
|
" sub %w3, %w1, %w4\n"
|
|
|
@@ -137,6 +138,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
|
|
|
" .align 3\n"
|
|
|
" .quad 1b, 4b, 2b, 4b\n"
|
|
|
" .popsection\n"
|
|
|
+ALTERNATIVE("nop", SET_PSTATE_PAN(1), ARM64_HAS_PAN, CONFIG_ARM64_PAN)
|
|
|
: "+r" (ret), "=&r" (val), "+Q" (*uaddr), "=&r" (tmp)
|
|
|
: "r" (oldval), "r" (newval), "Ir" (-EFAULT)
|
|
|
: "memory");
|