[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 2/2] xen/rwlock: add check_lock() handling to rwlocks
On 02.11.2020 14:12, Juergen Gross wrote: > --- a/xen/include/xen/rwlock.h > +++ b/xen/include/xen/rwlock.h > @@ -56,6 +56,7 @@ static inline int _read_trylock(rwlock_t *lock) > u32 cnts; > > preempt_disable(); > + check_lock(&lock->lock.debug, true); > cnts = atomic_read(&lock->cnts); > if ( likely(_can_read_lock(cnts)) ) > { I'm sorry for being picky, but this still isn't matching _spin_trylock(). Perhaps the difference is really benign, but there the check sits ahead of preempt_disable(). (It has a clear reason to be this way there, but without a clear reason for things to be differently here, I think matching ordering may help, at least to avoid questions.) > @@ -66,6 +67,7 @@ static inline int _read_trylock(rwlock_t *lock) > */ > if ( likely(_can_read_lock(cnts)) ) > return 1; > + > atomic_sub(_QR_BIAS, &lock->cnts); > } > preempt_enable(); Stray change? > @@ -87,7 +89,10 @@ static inline void _read_lock(rwlock_t *lock) > * arch_lock_acquire_barrier(). > */ > if ( likely(_can_read_lock(cnts)) ) > + { > + check_lock(&lock->lock.debug, false); > return; > + } > > /* The slowpath will decrement the reader count, if necessary. */ > queue_read_lock_slowpath(lock); > @@ -162,7 +167,10 @@ static inline void _write_lock(rwlock_t *lock) > * arch_lock_acquire_barrier(). > */ > if ( atomic_cmpxchg(&lock->cnts, 0, _write_lock_val()) == 0 ) > + { > + check_lock(&lock->lock.debug, false); > return; > + } > > queue_write_lock_slowpath(lock); > /* Maybe also for these two, but likely more importantly for ... > @@ -328,6 +337,8 @@ static inline void _percpu_read_lock(percpu_rwlock_t > **per_cpudata, > /* Drop the read lock because we don't need it anymore. */ > read_unlock(&percpu_rwlock->rwlock); > } > + else > + check_lock(&percpu_rwlock->rwlock.lock.debug, false); > } ... this one a brief comment may be warranted to clarify why the call sits here rather than at the top? Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |