There's no need to subtract _QR_BIAS from the lock value for storing in the local cnts variable in the read lock slow path: the users of the value in cnts only care about the writer-related bits and use a mask to get the value.
Note that further setting of cnts in rspin_until_writer_unlock already do not subtract _QR_BIAS. Signed-off-by: Roger Pau Monné <roger....@citrix.com> --- xen/common/rwlock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/common/rwlock.c b/xen/common/rwlock.c index dadab372b5..aa15529bbe 100644 --- a/xen/common/rwlock.c +++ b/xen/common/rwlock.c @@ -47,7 +47,7 @@ void queue_read_lock_slowpath(rwlock_t *lock) while ( atomic_read(&lock->cnts) & _QW_WMASK ) cpu_relax(); - cnts = atomic_add_return(_QR_BIAS, &lock->cnts) - _QR_BIAS; + cnts = atomic_add_return(_QR_BIAS, &lock->cnts); rspin_until_writer_unlock(lock, cnts); /* -- 2.34.1