@@ -17,13 +17,9 @@ do { \
17
17
int oldval = 0, ret; \
18
18
asm volatile("1:\t" insn "\n" \
19
19
"2:\n" \
20
- "\t.section .fixup,\"ax\"\n" \
21
- "3:\tmov\t%3, %1\n" \
22
- "\tjmp\t2b\n" \
23
- "\t.previous\n" \
24
- _ASM_EXTABLE_UA(1b, 3b) \
20
+ _ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_EFAULT_REG, %1) \
25
21
: "=r" (oldval), "=r" (ret), "+m" (*uaddr) \
26
- : "i" (-EFAULT), " 0" (oparg), "1" (0)); \
22
+ : "0" (oparg), "1" (0)); \
27
23
if (ret) \
28
24
goto label; \
29
25
*oval = oldval; \
@@ -39,15 +35,11 @@ do { \
39
35
"3:\t" LOCK_PREFIX "cmpxchgl %3, %2\n" \
40
36
"\tjnz\t2b\n" \
41
37
"4:\n" \
42
- "\t.section .fixup,\"ax\"\n" \
43
- "5:\tmov\t%5, %1\n" \
44
- "\tjmp\t4b\n" \
45
- "\t.previous\n" \
46
- _ASM_EXTABLE_UA(1b, 5b) \
47
- _ASM_EXTABLE_UA(3b, 5b) \
38
+ _ASM_EXTABLE_TYPE_REG(1b, 4b, EX_TYPE_EFAULT_REG, %1) \
39
+ _ASM_EXTABLE_TYPE_REG(3b, 4b, EX_TYPE_EFAULT_REG, %1) \
48
40
: "=&a" (oldval), "=&r" (ret), \
49
41
"+m" (*uaddr), "=&r" (tem) \
50
- : "r" (oparg), "i" (-EFAULT), " 1" (0)); \
42
+ : "r" (oparg), "1" (0)); \
51
43
if (ret) \
52
44
goto label; \
53
45
*oval = oldval; \
@@ -95,15 +87,11 @@ static inline int futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
95
87
if (!user_access_begin (uaddr , sizeof (u32 )))
96
88
return - EFAULT ;
97
89
asm volatile ("\n"
98
- "1:\t" LOCK_PREFIX "cmpxchgl %4 , %2\n"
90
+ "1:\t" LOCK_PREFIX "cmpxchgl %3 , %2\n"
99
91
"2:\n"
100
- "\t.section .fixup, \"ax\"\n"
101
- "3:\tmov %3, %0\n"
102
- "\tjmp 2b\n"
103
- "\t.previous\n"
104
- _ASM_EXTABLE_UA (1b , 3b )
92
+ _ASM_EXTABLE_TYPE_REG (1b , 2b , EX_TYPE_EFAULT_REG , %0 ) \
105
93
: "+ r " (ret), " = a " (oldval), " + m " (*uaddr)
106
- : " i " (-EFAULT), " r " (newval), " 1 " (oldval)
94
+ : " r " (newval), " 1 " (oldval)
107
95
: " memory "
108
96
);
109
97
user_access_end ();
0 commit comments