|
|
@@ -30,8 +30,8 @@ do { \
|
|
|
" prfm pstl1strm, %2\n" \
|
|
|
"1: ldxr %w1, %2\n" \
|
|
|
insn "\n" \
|
|
|
-"2: stlxr %w3, %w0, %2\n" \
|
|
|
-" cbnz %w3, 1b\n" \
|
|
|
+"2: stlxr %w0, %w3, %2\n" \
|
|
|
+" cbnz %w0, 1b\n" \
|
|
|
" dmb ish\n" \
|
|
|
"3:\n" \
|
|
|
" .pushsection .fixup,\"ax\"\n" \
|
|
|
@@ -50,30 +50,30 @@ do { \
|
|
|
static inline int
|
|
|
arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *_uaddr)
|
|
|
{
|
|
|
- int oldval = 0, ret, tmp;
|
|
|
+ int oldval, ret, tmp;
|
|
|
u32 __user *uaddr = __uaccess_mask_ptr(_uaddr);
|
|
|
|
|
|
pagefault_disable();
|
|
|
|
|
|
switch (op) {
|
|
|
case FUTEX_OP_SET:
|
|
|
- __futex_atomic_op("mov %w0, %w4",
|
|
|
+ __futex_atomic_op("mov %w3, %w4",
|
|
|
ret, oldval, uaddr, tmp, oparg);
|
|
|
break;
|
|
|
case FUTEX_OP_ADD:
|
|
|
- __futex_atomic_op("add %w0, %w1, %w4",
|
|
|
+ __futex_atomic_op("add %w3, %w1, %w4",
|
|
|
ret, oldval, uaddr, tmp, oparg);
|
|
|
break;
|
|
|
case FUTEX_OP_OR:
|
|
|
- __futex_atomic_op("orr %w0, %w1, %w4",
|
|
|
+ __futex_atomic_op("orr %w3, %w1, %w4",
|
|
|
ret, oldval, uaddr, tmp, oparg);
|
|
|
break;
|
|
|
case FUTEX_OP_ANDN:
|
|
|
- __futex_atomic_op("and %w0, %w1, %w4",
|
|
|
+ __futex_atomic_op("and %w3, %w1, %w4",
|
|
|
ret, oldval, uaddr, tmp, ~oparg);
|
|
|
break;
|
|
|
case FUTEX_OP_XOR:
|
|
|
- __futex_atomic_op("eor %w0, %w1, %w4",
|
|
|
+ __futex_atomic_op("eor %w3, %w1, %w4",
|
|
|
ret, oldval, uaddr, tmp, oparg);
|
|
|
break;
|
|
|
default:
|