diff options
Diffstat (limited to 'arch/xtensa/include/asm/futex.h')
-rw-r--r-- | arch/xtensa/include/asm/futex.h | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/arch/xtensa/include/asm/futex.h b/arch/xtensa/include/asm/futex.h index b39531babec0..72bfc1cbc2b5 100644 --- a/arch/xtensa/include/asm/futex.h +++ b/arch/xtensa/include/asm/futex.h | |||
@@ -109,7 +109,6 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |||
109 | u32 oldval, u32 newval) | 109 | u32 oldval, u32 newval) |
110 | { | 110 | { |
111 | int ret = 0; | 111 | int ret = 0; |
112 | u32 prev; | ||
113 | 112 | ||
114 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))) | 113 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))) |
115 | return -EFAULT; | 114 | return -EFAULT; |
@@ -120,26 +119,24 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |||
120 | 119 | ||
121 | __asm__ __volatile__ ( | 120 | __asm__ __volatile__ ( |
122 | " # futex_atomic_cmpxchg_inatomic\n" | 121 | " # futex_atomic_cmpxchg_inatomic\n" |
123 | "1: l32i %1, %3, 0\n" | 122 | " wsr %5, scompare1\n" |
124 | " mov %0, %5\n" | 123 | "1: s32c1i %1, %4, 0\n" |
125 | " wsr %1, scompare1\n" | 124 | " s32i %1, %6, 0\n" |
126 | "2: s32c1i %0, %3, 0\n" | 125 | "2:\n" |
127 | "3:\n" | ||
128 | " .section .fixup,\"ax\"\n" | 126 | " .section .fixup,\"ax\"\n" |
129 | " .align 4\n" | 127 | " .align 4\n" |
130 | "4: .long 3b\n" | 128 | "3: .long 2b\n" |
131 | "5: l32r %1, 4b\n" | 129 | "4: l32r %1, 3b\n" |
132 | " movi %0, %6\n" | 130 | " movi %0, %7\n" |
133 | " jx %1\n" | 131 | " jx %1\n" |
134 | " .previous\n" | 132 | " .previous\n" |
135 | " .section __ex_table,\"a\"\n" | 133 | " .section __ex_table,\"a\"\n" |
136 | " .long 1b,5b,2b,5b\n" | 134 | " .long 1b,4b\n" |
137 | " .previous\n" | 135 | " .previous\n" |
138 | : "+r" (ret), "=&r" (prev), "+m" (*uaddr) | 136 | : "+r" (ret), "+r" (newval), "+m" (*uaddr), "+m" (*uval) |
139 | : "r" (uaddr), "r" (oldval), "r" (newval), "I" (-EFAULT) | 137 | : "r" (uaddr), "r" (oldval), "r" (uval), "I" (-EFAULT) |
140 | : "memory"); | 138 | : "memory"); |
141 | 139 | ||
142 | *uval = prev; | ||
143 | return ret; | 140 | return ret; |
144 | } | 141 | } |
145 | 142 | ||