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 > > 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 > Signed-off-by: Greg Kroah-Hartman > > --- > 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