Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / include / asm-sparc64 / futex.h
index 7392fc4..dee4020 100644 (file)
@@ -87,22 +87,24 @@ static inline int
 futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
 {
        __asm__ __volatile__(
-       "\n1:   casa    [%3] %%asi, %2, %0\n"
-       "2:\n"
+       "\n1:   lduwa   [%2] %%asi, %0\n"
+       "2:     casa    [%2] %%asi, %0, %1\n"
+       "3:\n"
        "       .section .fixup,#alloc,#execinstr\n"
        "       .align  4\n"
-       "3:     ba      2b\n"
-       "        mov    %4, %0\n"
+       "4:     ba      3b\n"
+       "        mov    %3, %0\n"
        "       .previous\n"
        "       .section __ex_table,\"a\"\n"
        "       .align  4\n"
-       "       .word   1b, 3b\n"
+       "       .word   1b, 4b\n"
+       "       .word   2b, 4b\n"
        "       .previous\n"
-       : "=r" (newval)
-       : "0" (newval), "r" (oldval), "r" (uaddr), "i" (-EFAULT)
+       : "=&r" (oldval)
+       : "r" (newval), "r" (uaddr), "i" (-EFAULT)
        : "memory");
 
-       return newval;
+       return oldval;
 }
 
 #endif /* !(_SPARC64_FUTEX_H) */