[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCHv3 3/4] xen: use ticket locks for spin locks
>>> On 21.04.15 at 12:11, <david.vrabel@xxxxxxxxxx> wrote: > @@ -213,27 +211,32 @@ int _spin_trylock(spinlock_t *lock) > > void _spin_barrier(spinlock_t *lock) > { > + spinlock_tickets_t sample; > #ifdef LOCK_PROFILE > s_time_t block = NOW(); > - u64 loop = 0; > +#endif > > check_barrier(&lock->debug); > - do { smp_mb(); loop++;} while ( _raw_spin_is_locked(&lock->raw) ); > - if ((loop > 1) && lock->profile) > + sample = observe_lock(&lock->tickets); > + if (sample.head != sample.tail) Even if the old code didn't conform to coding style, please make sure the new code does (a few more further down). > @@ -127,8 +125,16 @@ struct lock_profile_qhead { }; > > #endif > > +typedef union { > + u32 head_tail; > + struct { > + u16 head; > + u16 tail; > + }; > +} spinlock_tickets_t; > + > typedef struct spinlock { > - raw_spinlock_t raw; > + spinlock_tickets_t tickets; At least for x86 this means a growth of this and hence various other structures - did you examine the effects thereof? Of course otoh getting the lock size uniform across architectures is a good thing. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |