[PATCH 14/20] x86/ticketlock: loosen ordering restraints on unlock

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jeremy Fitzhardinge
Date: Wednesday, November 3, 2010 - 7:59 am

From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

It's only necessary to prevent the compiler from reordering code out of
the locked region past the unlock.  Putting too many barriers in prevents
the compiler from generating the best code when PV spinlocks are enabled.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
---
 arch/x86/include/asm/spinlock.h |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h
index b9a1aae..d6de5e7 100644
--- a/arch/x86/include/asm/spinlock.h
+++ b/arch/x86/include/asm/spinlock.h
@@ -46,9 +46,7 @@ static __always_inline void __ticket_unlock_release(struct arch_spinlock *lock)
 #else
 static __always_inline void __ticket_unlock_release(struct arch_spinlock *lock)
 {
-	barrier();
 	lock->tickets.head++;
-	barrier();
 }
 #endif
 
@@ -184,7 +182,11 @@ static __always_inline int arch_spin_trylock(arch_spinlock_t *lock)
 
 static __always_inline void arch_spin_unlock(arch_spinlock_t *lock)
 {
-	__ticket_t next = lock->tickets.head + 1;
+	__ticket_t next;
+
+	barrier();		/* prevent reordering out of locked region */
+
+	next = lock->tickets.head + 1;
 	__ticket_unlock_release(lock);
 	__ticket_unlock_kick(lock, next);
 }
-- 
1.7.2.3

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/20] x86: ticket lock rewrite and paravirtualization, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 01/20] x86/ticketlock: clean up types and accessors, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 02/20] x86/ticketlock: convert spin loop to C, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 03/20] x86/ticketlock: Use C for __ticket_spin_unlock, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 04/20] x86/ticketlock: make large and small ticket ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 05/20] x86/ticketlock: make __ticket_spin_lock common, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 06/20] x86/ticketlock: make __ticket_spin_trylock c ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 07/20] x86/spinlocks: replace pv spinlocks with pv ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 08/20] x86/ticketlock: collapse a layer of functions, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 09/20] xen/pvticketlock: Xen implementation for PV ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 10/20] x86/pvticketlock: keep count of blocked cpus, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 11/20] x86/pvticketlock: use callee-save for lock_s ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 12/20] x86/pvticketlock: use callee-save for unlock ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 13/20] x86/pvticketlock: make sure unlock is seen b ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 14/20] x86/ticketlock: loosen ordering restraints o ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 15/20] x86/ticketlock: prevent compiler reordering ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 16/20] x86/ticketlock: don't inline _spin_unlock wh ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 17/20] x86/ticketlock: clarify barrier in arch_spin ..., Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 18/20] x86/ticketlock: remove .slock, Jeremy Fitzhardinge, (Wed Nov 3, 7:59 am)
[PATCH 19/20] x86/ticketlocks: use overlapping read to eli ..., Jeremy Fitzhardinge, (Wed Nov 3, 8:00 am)
[PATCH 20/20] x86/ticketlock: rename ticketpair to head_tail, Jeremy Fitzhardinge, (Wed Nov 3, 8:00 am)
Re: [PATCH 02/20] x86/ticketlock: convert spin loop to C, Jeremy Fitzhardinge, (Wed Nov 3, 8:38 am)
Re: [PATCH 03/20] x86/ticketlock: Use C for __ticket_spin_ ..., Jeremy Fitzhardinge, (Wed Nov 3, 11:00 am)
Re: [PATCH 04/20] x86/ticketlock: make large and small tic ..., Srivatsa Vaddagiri, (Fri Nov 12, 5:19 am)
Re: [PATCH 04/20] x86/ticketlock: make large and small tic ..., Jeremy Fitzhardinge, (Fri Nov 12, 9:27 am)
Re: [PATCH 00/20] x86: ticket lock rewrite and paravirtual ..., Jeremy Fitzhardinge, (Fri Nov 12, 3:17 pm)
Re: [PATCH 01/20] x86/ticketlock: clean up types and accessors, Jeremy Fitzhardinge, (Mon Nov 15, 12:36 pm)
Re: [PATCH 03/20] x86/ticketlock: Use C for __ticket_spin_ ..., Jeremy Fitzhardinge, (Mon Nov 15, 12:38 pm)
Re: [PATCH 06/20] x86/ticketlock: make __ticket_spin_trylo ..., Jeremy Fitzhardinge, (Mon Nov 15, 12:39 pm)
Re: [PATCH 00/20] x86: ticket lock rewrite and paravirtual ..., Jeremy Fitzhardinge, (Mon Nov 15, 1:00 pm)
Re: [PATCH 00/20] x86: ticket lock rewrite and paravirtual ..., Jeremy Fitzhardinge, (Mon Nov 15, 2:02 pm)