aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Desnoyers <[email protected]>2008-08-15 12:56:59 -0400
committerH. Peter Anvin <[email protected]>2008-08-15 12:51:11 -0700
commit5bbd4c3724008c93cf3efdfc38a3402e245ab506 (patch)
tree5b74f2b70396f2cf808b368d415ae444fe94bfac
parent1f49a2c2aeb22d5abc6d4ea574ff63d37ca55fbe (diff)
x86: spinlock use LOCK_PREFIX
Since we are now using DS prefixes instead of NOP to remove LOCK prefixes, there is no longer any problems with instruction boundaries moving around. * Linus Torvalds ([email protected]) wrote: > > > On Thu, 14 Aug 2008, Mathieu Desnoyers wrote: > > > > Changing the 0x90 (single-byte nop) currently used into a 0x3E DS segment > > override prefix should fix this issue. Since the default of the atomic > > instructions is to use the DS segment anyway, it should not affect the > > behavior. > > Ok, so I think this is an _excellent_ patch, but I'd like to also then use > LOCK_PREFIX in include/asm-x86/futex.h. > > See commit 9d55b9923a1b7ea8193b8875c57ec940dc2ff027. > > Linus Unless there a rationale for this, I think these be changed to LOCK_PREFIX too. grep "lock ;" include/asm-x86/spinlock.h "lock ; cmpxchgw %w1,%2\n\t" asm volatile("lock ; xaddl %0, %1\n" "lock ; cmpxchgl %1,%2\n\t" Applies to 2.6.27-rc2. Signed-off-by: Mathieu Desnoyers <[email protected]> Acked-by: Linus Torvalds <[email protected]> CC: Linus Torvalds <[email protected]> CC: H. Peter Anvin <[email protected]> CC: Jeremy Fitzhardinge <[email protected]> CC: Roland McGrath <[email protected]> CC: Ingo Molnar <[email protected]> Cc: Steven Rostedt <[email protected]> CC: Steven Rostedt <[email protected]> CC: Thomas Gleixner <[email protected]> CC: Peter Zijlstra <[email protected]> CC: Andrew Morton <[email protected]> CC: David Miller <[email protected]> CC: Ulrich Drepper <[email protected]> CC: Rusty Russell <[email protected]> CC: Gregory Haskins <[email protected]> CC: Arnaldo Carvalho de Melo <[email protected]> CC: "Luis Claudio R. Goncalves" <[email protected]> CC: Clark Williams <[email protected]> CC: Christoph Lameter <[email protected]> CC: Andi Kleen <[email protected]> CC: Harvey Harrison <[email protected]> Signed-off-by: H. Peter Anvin <[email protected]>
-rw-r--r--include/asm-x86/spinlock.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/include/asm-x86/spinlock.h b/include/asm-x86/spinlock.h
index 4f9a9861799a..0b4d59a93d23 100644
--- a/include/asm-x86/spinlock.h
+++ b/include/asm-x86/spinlock.h
@@ -97,7 +97,7 @@ static __always_inline int __ticket_spin_trylock(raw_spinlock_t *lock)
"jne 1f\n\t"
"movw %w0,%w1\n\t"
"incb %h1\n\t"
- "lock ; cmpxchgw %w1,%2\n\t"
+ LOCK_PREFIX "cmpxchgw %w1,%2\n\t"
"1:"
"sete %b1\n\t"
"movzbl %b1,%0\n\t"
@@ -135,7 +135,7 @@ static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock)
int inc = 0x00010000;
int tmp;
- asm volatile("lock ; xaddl %0, %1\n"
+ asm volatile(LOCK_PREFIX "xaddl %0, %1\n"
"movzwl %w0, %2\n\t"
"shrl $16, %0\n\t"
"1:\t"
@@ -162,7 +162,7 @@ static __always_inline int __ticket_spin_trylock(raw_spinlock_t *lock)
"cmpl %0,%1\n\t"
"jne 1f\n\t"
"addl $0x00010000, %1\n\t"
- "lock ; cmpxchgl %1,%2\n\t"
+ LOCK_PREFIX "cmpxchgl %1,%2\n\t"
"1:"
"sete %b1\n\t"
"movzbl %b1,%0\n\t"