Re: [patch 43/45] x86: replace LOCK_PREFIX in futex.h

From: Stefan Lippers-Hollmann
Date: Fri Feb 08 2008 - 13:35:50 EST


Hi

On Donnerstag, 7. Februar 2008, Greg KH wrote:
> 2.6.24-stable review patch. If anyone has any objections, please let us know.
>
> ------------------
> From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
>
> The exception fixup for the futex macros __futex_atomic_op1/2 and
> futex_atomic_cmpxchg_inatomic() is missing an entry when the lock
> prefix is replaced by a NOP via SMP alternatives.
>
> Chuck Ebert tracked this down from the information provided in:
> https://bugzilla.redhat.com/show_bug.cgi?id=429412
>
> A possible solution would be to add another fixup after the
> LOCK_PREFIX, so both the LOCK and NOP case have their own entry in the
> exception table, but it's not really worth the trouble.
>
> Simply replace LOCK_PREFIX with lock and keep those untouched by SMP
> alternatives.
>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
>
> ---
> include/asm-x86/futex_32.h | 6 +++---
> include/asm-x86/futex_64.h | 6 +++---
> 2 files changed, 6 insertions(+), 6 deletions(-)

This patch seems to break compilation on x86_64 (i386 builds fine).

[...]
CC kernel/time/tick-sched.o
LD kernel/time/built-in.o
CC kernel/futex.o
In file included from include/asm/futex.h:4,
from kernel/futex.c:59:
include/asm/futex_64.h: In function âfutex_atomic_op_inuserâ:
include/asm/futex_64.h:69: error: expected â:â or â)â before âlockâ
include/asm/futex_64.h:69: error: stray â\â in program
In file included from include/asm/futex.h:4,
from kernel/futex.c:59:
include/asm/futex_64.h:69:61: error: invalid suffix "b" on integer constant
include/asm/futex_64.h:69: error: stray â\â in program
include/asm/futex_64.h:69: error: stray â\â in program
include/asm/futex_64.h:72: error: expected â:â or â)â before âlockâ
include/asm/futex_64.h:72: error: stray â\â in program
include/asm/futex_64.h:72:63: error: invalid suffix "b" on integer constant
include/asm/futex_64.h:72: error: stray â\â in program
include/asm/futex_64.h:72: error: stray â\â in program
include/asm/futex_64.h:75: error: expected â:â or â)â before âlockâ
include/asm/futex_64.h:75: error: stray â\â in program
include/asm/futex_64.h:75:62: error: invalid suffix "b" on integer constant
include/asm/futex_64.h:75: error: stray â\â in program
include/asm/futex_64.h:75: error: stray â\â in program
include/asm/futex_64.h:51: warning: unused variable âtemâ
make[1]: *** [kernel/futex.o] Fehler 1
make: *** [kernel] Fehler 2

Tested on current debian-amd64/ unstable.
ii binutils 2.18.1~cvs20080103-1 The GNU assembler, linker and binary utiliti
ii gcc-4.2 4.2.3-1 The GNU C compiler
ii gcc-4.2-base 4.2.3-1 The GNU Compiler Collection (base package)

[...]
> --- a/include/asm-x86/futex_64.h
> +++ b/include/asm-x86/futex_64.h
> @@ -27,7 +27,7 @@
> "1: movl %2, %0\n\
> movl %0, %3\n" \
> insn "\n" \
> -"2: " LOCK_PREFIX "cmpxchgl %3, %2\n\
> +"2: "lock cmpxchgl %3, %2\n\
> jnz 1b\n\
> 3: .section .fixup,\"ax\"\n\
> 4: mov %5, %1\n\
> @@ -62,7 +62,7 @@ futex_atomic_op_inuser (int encoded_op,
> __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
> break;
> case FUTEX_OP_ADD:
> - __futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret, oldval,
> + __futex_atomic_op1("lock xaddl %0, %2", ret, oldval,
> uaddr, oparg);
> break;
> case FUTEX_OP_OR:
> @@ -101,7 +101,7 @@ futex_atomic_cmpxchg_inatomic(int __user
> return -EFAULT;
>
> __asm__ __volatile__(
> - "1: " LOCK_PREFIX "cmpxchgl %3, %1 \n"
> + "1: lock cmpxchgl %3, %1 \n"
>
> "2: .section .fixup, \"ax\" \n"
> "3: mov %2, %0 \n"

Regards
Stefan Lippers-Hollmann

Attachment: signature.asc
Description: This is a digitally signed message part.