Re: [PATCH] x86: fix and improve cmpxchg_double{,_local}()

From: Jan Beulich
Date: Tue Jan 03 2012 - 11:07:52 EST


>>> On 03.01.12 at 16:41, Eric Dumazet <eric.dumazet@xxxxxxxxx> wrote:
> Le mardi 03 janvier 2012 Ã 16:15 +0100, Eric Dumazet a Ãcrit :
>
>> Very old it seems...
>>
>> arch/x86/lib/atomic64_cx8_32.S
>>
>> all "jxx 1b" are wrong if a LOCK_PREFIX is included after the 1: label
>>
>> 1:
>> inst1
>> LOCK_PREFIX
>> cmpxchg8b (%ebp)
>> jne 1b / jumps to beginning of LOCK_PREFIX, inst1 is not replayed
>>
>>
>>
>>
>
> A possible fix would be to not use "1" label in LOCK_PREFIX macro,
> but 672 magic value.
>
> Not sure if we can use a local label in a macro ?

"1" and "672" are both local labels, so both are okay. As long as there's
no other (colliding) use of 672 anywhere, that would seem to be the
preferred fix (feel free to put my ack on the patch when you formally
submit it).

Jan

> arch/x86/include/asm/alternative-asm.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/include/asm/alternative-asm.h
> b/arch/x86/include/asm/alternative-asm.h
> index 091508b..952bd01 100644
> --- a/arch/x86/include/asm/alternative-asm.h
> +++ b/arch/x86/include/asm/alternative-asm.h
> @@ -4,10 +4,10 @@
>
> #ifdef CONFIG_SMP
> .macro LOCK_PREFIX
> -1: lock
> +672: lock
> .section .smp_locks,"a"
> .balign 4
> - .long 1b - .
> + .long 672b - .
> .previous
> .endm
> #else


--
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/