Re: [PATCH] x86: fix and improve cmpxchg_double{,_local}()
From: Jan Beulich <hidden>
Date: 2012-01-03 16:07:53
Also in:
lkml
quoted
quoted
On 03.01.12 at 16:41, Eric Dumazet [off-list ref] wrote:Le mardi 03 janvier 2012 à 16:15 +0100, Eric Dumazet a écrit :quoted
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 replayedA 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
quoted hunk ↗ jump to hunk
arch/x86/include/asm/alternative-asm.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)diff --git a/arch/x86/include/asm/alternative-asm.hb/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