|
[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 |