x86: prepare merging futex_32/64.h
authorThomas Gleixner <tglx@linutronix.de>
Wed, 30 Jan 2008 12:30:20 +0000 (13:30 +0100)
committerIngo Molnar <mingo@elte.hu>
Wed, 30 Jan 2008 12:30:20 +0000 (13:30 +0100)
Replace .quad/.long with a define and use the same asm syntax
for i386 and x86.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
include/asm-x86/futex_32.h
include/asm-x86/futex_64.h

index 438ef0ec7101c2f4b2fcf4fb711f99e81494712e..c80013e19c2162de4d434ab29ad3fd624a828c73 100644 (file)
@@ -4,6 +4,8 @@
 #ifdef __KERNEL__
 
 #include <linux/futex.h>
+
+#include <asm/asm.h>
 #include <asm/errno.h>
 #include <asm/system.h>
 #include <asm/processor.h>
        jmp     2b\n\
        .previous\n\
        .section __ex_table,\"a\"\n\
-       .align  8\n\
-       .long   1b,3b\n\
+       .align  8\n"                                            \
+       _ASM_PTR "1b,3b\n                                       \
        .previous"                                              \
        : "=r" (oldval), "=r" (ret), "+m" (*uaddr)              \
        : "i" (-EFAULT), "0" (oparg), "1" (0))
 
-#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \
+#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg)    \
   __asm__ __volatile (                                         \
 "1:    movl    %2, %0\n\
        movl    %0, %3\n"                                       \
@@ -35,8 +37,8 @@
        jmp     3b\n\
        .previous\n\
        .section __ex_table,\"a\"\n\
-       .align  8\n\
-       .long   1b,4b,2b,4b\n\
+       .align  8\n"                                            \
+       _ASM_PTR "1b,4b,2b,4b\n                                 \
        .previous"                                              \
        : "=&a" (oldval), "=&r" (ret), "+m" (*uaddr),           \
          "=&r" (tem)                                           \
@@ -56,36 +58,32 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
        if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
                return -EFAULT;
 
+#ifndef CONFIG_X86_BSWAP
+       if (op == FUTEX_OP_SET && boot_cpu_data.x86 == 3)
+               return -ENOSYS;
+#endif
+
        pagefault_disable();
 
-       if (op == FUTEX_OP_SET)
+       switch (op) {
+       case FUTEX_OP_SET:
                __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
-       else {
-#ifndef CONFIG_X86_BSWAP
-               if (boot_cpu_data.x86 == 3)
-                       ret = -ENOSYS;
-               else
-#endif
-               switch (op) {
-               case FUTEX_OP_ADD:
-                       __futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret,
-                                          oldval, uaddr, oparg);
-                       break;
-               case FUTEX_OP_OR:
-                       __futex_atomic_op2("orl %4, %3", ret, oldval, uaddr,
-                                          oparg);
-                       break;
-               case FUTEX_OP_ANDN:
-                       __futex_atomic_op2("andl %4, %3", ret, oldval, uaddr,
-                                          ~oparg);
-                       break;
-               case FUTEX_OP_XOR:
-                       __futex_atomic_op2("xorl %4, %3", ret, oldval, uaddr,
-                                          oparg);
-                       break;
-               default:
-                       ret = -ENOSYS;
-               }
+               break;
+       case FUTEX_OP_ADD:
+               __futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret, oldval,
+                                  uaddr, oparg);
+               break;
+       case FUTEX_OP_OR:
+               __futex_atomic_op2("orl %4, %3", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_ANDN:
+               __futex_atomic_op2("andl %4, %3", ret, oldval, uaddr, ~oparg);
+               break;
+       case FUTEX_OP_XOR:
+               __futex_atomic_op2("xorl %4, %3", ret, oldval, uaddr, oparg);
+               break;
+       default:
+               ret = -ENOSYS;
        }
 
        pagefault_enable();
@@ -120,7 +118,7 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
 
                "       .section __ex_table, \"a\"              \n"
                "       .align  8                               \n"
-               "       .long   1b,3b                           \n"
+                       _ASM_PTR " 1b,3b                        \n"
                "       .previous                               \n"
 
                : "=a" (oldval), "+m" (*uaddr)
index 5cdfb08013c38889dc8a42a2dff4c4a3c1833ff8..02964d225d18bd89ab31d72142b0ab1382f117a3 100644 (file)
@@ -4,6 +4,8 @@
 #ifdef __KERNEL__
 
 #include <linux/futex.h>
+
+#include <asm/asm.h>
 #include <asm/errno.h>
 #include <asm/system.h>
 #include <asm/uaccess.h>
        jmp     2b\n\
        .previous\n\
        .section __ex_table,\"a\"\n\
-       .align  8\n\
-       .quad   1b,3b\n\
+       .align  8\n"                                            \
+       _ASM_PTR "1b,3b\n                                       \
        .previous"                                              \
-       : "=r" (oldval), "=r" (ret), "=m" (*uaddr)              \
-       : "i" (-EFAULT), "m" (*uaddr), "0" (oparg), "1" (0))
+       : "=r" (oldval), "=r" (ret), "+m" (*uaddr)              \
+       : "i" (-EFAULT), "0" (oparg), "1" (0))
 
-#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \
+#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg)    \
   __asm__ __volatile (                                         \
 "1:    movl    %2, %0\n\
        movl    %0, %3\n"                                       \
        jmp     3b\n\
        .previous\n\
        .section __ex_table,\"a\"\n\
-       .align  8\n\
-       .quad   1b,4b,2b,4b\n\
+       .align  8\n"                                            \
+       _ASM_PTR "1b,4b,2b,4b\n                                 \
        .previous"                                              \
-       : "=&a" (oldval), "=&r" (ret), "=m" (*uaddr),           \
+       : "=&a" (oldval), "=&r" (ret), "+m" (*uaddr),           \
          "=&r" (tem)                                           \
-       : "r" (oparg), "i" (-EFAULT), "m" (*uaddr), "1" (0))
+       : "r" (oparg), "i" (-EFAULT), "1" (0))
 
 static inline int
 futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
@@ -110,10 +112,10 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
 
                "       .section __ex_table, \"a\"              \n"
                "       .align  8                               \n"
-               "       .quad   1b,3b                           \n"
+                       _ASM_PTR " 1b,3b                        \n"
                "       .previous                               \n"
 
-               : "=a" (oldval), "=m" (*uaddr)
+               : "=a" (oldval), "+m" (*uaddr)
                : "i" (-EFAULT), "r" (newval), "0" (oldval)
                : "memory"
        );