|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-devel
[Xen-devel] [PATCH 14/20] x86/ticketlock: loosen ordering	restraints on 
 
| 
To:  | 
Peter Zijlstra <peterz@xxxxxxxxxxxxx> | 
 
| 
Subject:  | 
[Xen-devel] [PATCH 14/20] x86/ticketlock: loosen ordering	restraints on unlock | 
 
| 
From:  | 
Jeremy Fitzhardinge <jeremy@xxxxxxxx> | 
 
| 
Date:  | 
Wed,  3 Nov 2010 10:59:55 -0400 | 
 
| 
Cc:  | 
Nick Piggin <npiggin@xxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>,	Srivatsa Vaddagiri <vatsa@xxxxxxxxxxxxxxxxxx>,	Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>,	Jan Beulich <JBeulich@xxxxxxxxxx>,	Linux Virtualization <virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx>,	Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>,	Avi Kivity <avi@xxxxxxxxxx>, "H. Peter Anvin" <hpa@xxxxxxxxx> | 
 
| 
Delivery-date:  | 
Wed, 03 Nov 2010 08:12:22 -0700 | 
 
| 
Envelope-to:  | 
www-data@xxxxxxxxxxxxxxxxxxx | 
 
| 
In-reply-to:  | 
<cover.1288794124.git.jeremy.fitzhardinge@xxxxxxxxxx> | 
 
| 
In-reply-to:  | 
<cover.1288794124.git.jeremy.fitzhardinge@xxxxxxxxxx> | 
 
| 
List-help:  | 
<mailto:xen-devel-request@lists.xensource.com?subject=help> | 
 
| 
List-id:  | 
Xen developer discussion <xen-devel.lists.xensource.com> | 
 
| 
List-post:  | 
<mailto:xen-devel@lists.xensource.com> | 
 
| 
List-subscribe:  | 
<http://lists.xensource.com/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=subscribe> | 
 
| 
List-unsubscribe:  | 
<http://lists.xensource.com/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe> | 
 
| 
References:  | 
<cover.1288794124.git.jeremy.fitzhardinge@xxxxxxxxxx> | 
 
| 
References:  | 
<cover.1288794124.git.jeremy.fitzhardinge@xxxxxxxxxx> | 
 
| 
Sender:  | 
xen-devel-bounces@xxxxxxxxxxxxxxxxxxx | 
 
 
 
From: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
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@xxxxxxxxxx>
---
 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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 |   
 
| <Prev in Thread] | 
Current Thread | 
[Next in Thread>
 |  
- [Xen-devel] Re: [PATCH 03/20] x86/ticketlock: Use C for	__ticket_spin_unlock, (continued)
- [Xen-devel] [PATCH 06/20] x86/ticketlock: make	__ticket_spin_trylock common, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 08/20] x86/ticketlock: collapse a layer of	functions, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 01/20] x86/ticketlock: clean up types and	accessors, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 11/20] x86/pvticketlock: use callee-save for	lock_spinning, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 12/20] x86/pvticketlock: use callee-save for	unlock_kick as well, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 17/20] x86/ticketlock: clarify barrier in	arch_spin_lock, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 14/20] x86/ticketlock: loosen ordering	restraints on unlock,
Jeremy Fitzhardinge <=
 
- [Xen-devel] [PATCH 16/20] x86/ticketlock: don't inline _spin_unlock	when using paravirt spinlocks, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 09/20] xen/pvticketlock: Xen implementation for	PV ticket locks, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 05/20] x86/ticketlock: make __ticket_spin_lock	common, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 10/20] x86/pvticketlock: keep count of blocked	cpus, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 20/20] x86/ticketlock: rename ticketpair to	head_tail, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 07/20] x86/spinlocks: replace pv spinlocks with	pv ticketlocks, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 15/20] x86/ticketlock: prevent compiler	reordering into locked region, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 13/20] x86/pvticketlock: make sure unlock is	seen by everyone before checking waiters, Jeremy Fitzhardinge
 
- [Xen-devel] [PATCH 02/20] x86/ticketlock: convert spin loop to C, Jeremy Fitzhardinge
 
 
 
 
 |  
  
 | 
    | 
  
  
    |   | 
    |