x86: Provide an alternative() based cmpxchg64()
authorArjan van de Ven <arjan@infradead.org>
Wed, 30 Sep 2009 15:07:54 +0000 (17:07 +0200)
committerIngo Molnar <mingo@elte.hu>
Wed, 30 Sep 2009 20:55:59 +0000 (22:55 +0200)
commit79e1dd05d1a22e95ab6d54d21836f478b3b56976
tree03f9ff44af91de79c33abec468dd278d9cde83d4
parent17d857be649a21ca90008c6dc425d849fa83db5c
x86: Provide an alternative() based cmpxchg64()

cmpxchg64() today generates, to quote Linus, "barf bag" code.

cmpxchg64() is about to get used in the scheduler to fix a bug there,
but it's a prerequisite that cmpxchg64() first be made non-sucking.

This patch turns cmpxchg64() into an efficient implementation that
uses the alternative() mechanism to just use the raw instruction on
all modern systems.

Note: the fallback is NOT smp safe, just like the current fallback
is not SMP safe. (Interested parties with i486 based SMP systems
are welcome to submit fix patches for that.)

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
[ fixed asm constraint bug ]
Fixed-by: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: John Stultz <johnstul@us.ibm.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20090930170754.0886ff2e@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/cmpxchg_32.h
arch/x86/kernel/i386_ksyms_32.c
arch/x86/lib/Makefile
arch/x86/lib/cmpxchg8b_emu.S [new file with mode: 0644]