Re: [patch 5/6] lightweight robust futexes: i386

From: Chuck Ebbert
Date: Tue Feb 21 2006 - 10:55:29 EST


In-Reply-To: <20060216094234.GF29716@xxxxxxx>

On Thu, 16 Feb 2006 at 10:42:34 +0100, Ingo Molnar wrote:

> --- linux-robust-list.q.orig/include/asm-i386/futex.h
> +++ linux-robust-list.q/include/asm-i386/futex.h
> @@ -107,7 +107,25 @@ futex_atomic_op_inuser (int encoded_op,
> static inline int
> futex_atomic_cmpxchg_inuser(int __user *uaddr, int oldval, int newval)
> {
> - return -ENOSYS;
> + __asm__ __volatile__(
> + "1: " LOCK_PREFIX "cmpxchgl %3, %1 \n"
> +
> + "2: .section .fixup, \"ax\" \n"
> + "3: mov %2, %0 \n"
> + " jmp 2b \n"
> + " .previous \n"
> +
> + " .section __ex_table, \"a\" \n"
> + " .align 8 \n"
> + " .long 1b,3b \n"
> + " .previous \n"
> +
> + : "=a" (oldval), "=m" (*uaddr)
^^^^
Should be "+m" because it's both read and written.

> + : "i" (-EFAULT), "r" (newval), "0" (oldval)
> + : "memory"
^^^^^^^^
Is this necessary? Every possible memory location that could be
affected has been listed in the operands if the above change is made.

> + );
> +
> + return oldval;
> }
>
> #endif
--
Chuck
"Equations are the Devil's sentences." --Stephen Colbert
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/