diff options
| -rw-r--r-- | arch/x86/include/asm/futex.h | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/arch/x86/include/asm/futex.h b/arch/x86/include/asm/futex.h index be27ba1e947a..b4c1f5453436 100644 --- a/arch/x86/include/asm/futex.h +++ b/arch/x86/include/asm/futex.h | |||
| @@ -110,26 +110,7 @@ static inline int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr) | |||
| 110 | static inline int futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | 110 | static inline int futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, |
| 111 | u32 oldval, u32 newval) | 111 | u32 oldval, u32 newval) |
| 112 | { | 112 | { |
| 113 | int ret = 0; | 113 | return user_atomic_cmpxchg_inatomic(uval, uaddr, oldval, newval); |
| 114 | |||
| 115 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))) | ||
| 116 | return -EFAULT; | ||
| 117 | |||
| 118 | asm volatile("\t" ASM_STAC "\n" | ||
| 119 | "1:\t" LOCK_PREFIX "cmpxchgl %4, %2\n" | ||
| 120 | "2:\t" ASM_CLAC "\n" | ||
| 121 | "\t.section .fixup, \"ax\"\n" | ||
| 122 | "3:\tmov %3, %0\n" | ||
| 123 | "\tjmp 2b\n" | ||
| 124 | "\t.previous\n" | ||
| 125 | _ASM_EXTABLE(1b, 3b) | ||
| 126 | : "+r" (ret), "=a" (oldval), "+m" (*uaddr) | ||
| 127 | : "i" (-EFAULT), "r" (newval), "1" (oldval) | ||
| 128 | : "memory" | ||
| 129 | ); | ||
| 130 | |||
| 131 | *uval = oldval; | ||
| 132 | return ret; | ||
| 133 | } | 114 | } |
| 134 | 115 | ||
| 135 | #endif | 116 | #endif |
