mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 16:41:58 +00:00
x86: replace LOCK_PREFIX in futex.h
The exception fixup for the futex macros __futex_atomic_op1/2 and futex_atomic_cmpxchg_inatomic() is missing an entry when the lock prefix is replaced by a NOP via SMP alternatives. Chuck Ebert tracked this down from the information provided in: https://bugzilla.redhat.com/show_bug.cgi?id=429412 A possible solution would be to add another fixup after the LOCK_PREFIX, so both the LOCK and NOP case have their own entry in the exception table, but it's not really worth the trouble. Simply replace LOCK_PREFIX with lock and keep those untouched by SMP alternatives. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
5df7fa1c62
commit
9d55b9923a
@ -30,7 +30,7 @@
|
|||||||
"1: movl %2, %0\n \
|
"1: movl %2, %0\n \
|
||||||
movl %0, %3\n" \
|
movl %0, %3\n" \
|
||||||
insn "\n" \
|
insn "\n" \
|
||||||
"2: " LOCK_PREFIX "cmpxchgl %3, %2\n \
|
"2: lock; cmpxchgl %3, %2\n \
|
||||||
jnz 1b\n \
|
jnz 1b\n \
|
||||||
3: .section .fixup,\"ax\"\n \
|
3: .section .fixup,\"ax\"\n \
|
||||||
4: mov %5, %1\n \
|
4: mov %5, %1\n \
|
||||||
@ -72,7 +72,7 @@ futex_atomic_op_inuser(int encoded_op, int __user *uaddr)
|
|||||||
__futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
|
__futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
|
||||||
break;
|
break;
|
||||||
case FUTEX_OP_ADD:
|
case FUTEX_OP_ADD:
|
||||||
__futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret, oldval,
|
__futex_atomic_op1("lock; xaddl %0, %2", ret, oldval,
|
||||||
uaddr, oparg);
|
uaddr, oparg);
|
||||||
break;
|
break;
|
||||||
case FUTEX_OP_OR:
|
case FUTEX_OP_OR:
|
||||||
@ -111,8 +111,8 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"1: " LOCK_PREFIX "cmpxchgl %3, %1 \n"
|
|
||||||
|
|
||||||
|
"1: lock; cmpxchgl %3, %1 \n"
|
||||||
"2: .section .fixup, \"ax\" \n"
|
"2: .section .fixup, \"ax\" \n"
|
||||||
"3: mov %2, %0 \n"
|
"3: mov %2, %0 \n"
|
||||||
" jmp 2b \n"
|
" jmp 2b \n"
|
||||||
|
Loading…
Reference in New Issue
Block a user