lkml.org 
[lkml]   [2010]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 03/20] x86/ticketlock: Use C for __ticket_spin_unlock
    On Wed, Nov 03, 2010 at 10:59:44AM -0400, Jeremy Fitzhardinge wrote:
    > * On PPro SMP or if we are using OOSTORE, we use a locked operation to unlock
    > * (PPro errata 66, 92)
    > */
    >-# define UNLOCK_LOCK_PREFIX LOCK_PREFIX
    >+static __always_inline void __ticket_unlock_release(struct arch_spinlock *lock)
    >+{
    >+ if (sizeof(lock->tickets.head) == sizeof(u8))
    >+ asm (LOCK_PREFIX "incb %0"
    >+ : "+m" (lock->tickets.head) : : "memory");
    >+ else
    >+ asm (LOCK_PREFIX "incw %0"
    >+ : "+m" (lock->tickets.head) : : "memory");

    This 'if/else' really should be done with #ifdef, even though
    the compiler may be smart enough to remove it.

    >+
    >+}
    > #else
    >-# define UNLOCK_LOCK_PREFIX
    >+static __always_inline void __ticket_unlock_release(struct arch_spinlock *lock)
    >+{
    >+ barrier();
    >+ lock->tickets.head++;
    >+ barrier();

    The second barrier() is not needed.

    Thanks.


    \
     
     \ /
      Last update: 2010-11-13 11:05    [W:0.070 / U:0.676 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site