From 6b79b52cf3d5b3d0f02f0ac185d7feebdd7308cb Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Thu, 16 Feb 2017 20:29:01 +0100 Subject: [PATCH] Revert "Microoptimize locking primitives by avoiding unnecessary atomic ops." This reverts commit 25669dd1d9562b9b1717d5ef59b15e1716c81634. --- sys/kern/kern_rwlock.c | 4 +--- sys/sys/rwlock.h | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c index ea2f969a8ba..84283327e8c 100644 --- a/sys/kern/kern_rwlock.c +++ b/sys/kern/kern_rwlock.c @@ -809,9 +809,7 @@ __rw_wlock_hard(volatile uintptr_t *c, uintptr_t tid, const char *file, all_time -= lockstat_nsecs(&rw->lock_object); state = rw->rw_lock; #endif - for (;;) { - if (rw->rw_lock == RW_UNLOCKED && _rw_write_lock(rw, tid)) - break; + while (!_rw_write_lock(rw, tid)) { #ifdef KDTRACE_HOOKS lda.spin_cnt++; #endif diff --git a/sys/sys/rwlock.h b/sys/sys/rwlock.h index 6b4f505e0d0..f8947c55617 100644 --- a/sys/sys/rwlock.h +++ b/sys/sys/rwlock.h @@ -96,7 +96,7 @@ #define __rw_wlock(rw, tid, file, line) do { \ uintptr_t _tid = (uintptr_t)(tid); \ \ - if ((rw)->rw_lock != RW_UNLOCKED || !_rw_write_lock((rw), _tid))\ + if (!_rw_write_lock((rw), _tid)) \ _rw_wlock_hard((rw), _tid, (file), (line)); \ else \ LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(rw__acquire, rw, \ @@ -112,7 +112,7 @@ else { \ LOCKSTAT_PROFILE_RELEASE_RWLOCK(rw__release, rw, \ LOCKSTAT_WRITER); \ - if ((rw)->rw_lock != _tid || !_rw_write_unlock((rw), _tid))\ + if (!_rw_write_unlock((rw), _tid)) \ _rw_wunlock_hard((rw), _tid, (file), (line)); \ } \ } while (0)