From 3f7830a31e3eb4d1d378c1776fb7de1fd47f7bba Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Sun, 2 Jul 2017 01:05:16 +0000 Subject: [PATCH] rwlock: perform the typically false td_rw_rlocks check later Check if the lock is available first instead. MFC after: 1 week --- sys/kern/kern_rwlock.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c index c8b1d7ca7169..1de8b1366e70 100644 --- a/sys/kern/kern_rwlock.c +++ b/sys/kern/kern_rwlock.c @@ -372,9 +372,8 @@ _rw_wunlock_cookie(volatile uintptr_t *c, const char *file, int line) * prioritizes writers before readers. */ #define RW_CAN_READ(td, _rw) \ - (((td)->td_rw_rlocks && (_rw) & RW_LOCK_READ) || ((_rw) & \ - (RW_LOCK_READ | RW_LOCK_WRITE_WAITERS | RW_LOCK_WRITE_SPINNER)) == \ - RW_LOCK_READ) + (((_rw) & (RW_LOCK_READ | RW_LOCK_WRITE_WAITERS | RW_LOCK_WRITE_SPINNER)) ==\ + RW_LOCK_READ || ((td)->td_rw_rlocks && (_rw) & RW_LOCK_READ)) static bool __always_inline __rw_rlock_try(struct rwlock *rw, struct thread *td, uintptr_t *vp,