Skip to content

Commit 4c132d1

Browse files
author
Peter Zijlstra
committed
x86/futex: Remove .fixup usage
Use the new EX_TYPE_IMM_REG to store -EFAULT into the designated 'ret' register, this removes the need for anonymous .fixup code. Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Reviewed-by: Josh Poimboeuf <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent d52a734 commit 4c132d1

File tree

2 files changed

+10
-20
lines changed

2 files changed

+10
-20
lines changed

arch/x86/include/asm/extable_fixup_types.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#define EX_TYPE_DEFAULT_MCE_SAFE 14
4343
#define EX_TYPE_FAULT_MCE_SAFE 15
4444
#define EX_TYPE_POP_ZERO 16
45+
4546
#define EX_TYPE_IMM_REG 17 /* reg := (long)imm */
47+
#define EX_TYPE_EFAULT_REG (EX_TYPE_IMM_REG | EX_DATA_IMM(-EFAULT))
4648

4749
#endif

arch/x86/include/asm/futex.h

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,9 @@ do { \
1717
int oldval = 0, ret; \
1818
asm volatile("1:\t" insn "\n" \
1919
"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) \
2521
: "=r" (oldval), "=r" (ret), "+m" (*uaddr) \
26-
: "i" (-EFAULT), "0" (oparg), "1" (0)); \
22+
: "0" (oparg), "1" (0)); \
2723
if (ret) \
2824
goto label; \
2925
*oval = oldval; \
@@ -39,15 +35,11 @@ do { \
3935
"3:\t" LOCK_PREFIX "cmpxchgl %3, %2\n" \
4036
"\tjnz\t2b\n" \
4137
"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) \
4840
: "=&a" (oldval), "=&r" (ret), \
4941
"+m" (*uaddr), "=&r" (tem) \
50-
: "r" (oparg), "i" (-EFAULT), "1" (0)); \
42+
: "r" (oparg), "1" (0)); \
5143
if (ret) \
5244
goto label; \
5345
*oval = oldval; \
@@ -95,15 +87,11 @@ static inline int futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
9587
if (!user_access_begin(uaddr, sizeof(u32)))
9688
return -EFAULT;
9789
asm volatile("\n"
98-
"1:\t" LOCK_PREFIX "cmpxchgl %4, %2\n"
90+
"1:\t" LOCK_PREFIX "cmpxchgl %3, %2\n"
9991
"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) \
10593
: "+r" (ret), "=a" (oldval), "+m" (*uaddr)
106-
: "i" (-EFAULT), "r" (newval), "1" (oldval)
94+
: "r" (newval), "1" (oldval)
10795
: "memory"
10896
);
10997
user_access_end();

0 commit comments

Comments
 (0)