aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_rwlock.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2017-11-11 09:34:11 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2017-11-11 09:34:11 +0000
commitc7e4e92ecd66cdfd0b2eaad220bf69a5d7877855 (patch)
treecb3db6bf9f8bd2e221f534a548be588045e62ec4 /sys/kern/kern_rwlock.c
parent7a9e3b169fbbe3a06c671bd0eac43f407cd642a4 (diff)
downloadsrc-c7e4e92ecd66cdfd0b2eaad220bf69a5d7877855.tar.gz
src-c7e4e92ecd66cdfd0b2eaad220bf69a5d7877855.zip
rwlock: use fcmpset for setting RW_LOCK_WRITE_SPINNER
Notes
Notes: svn path=/head/; revision=325706
Diffstat (limited to 'sys/kern/kern_rwlock.c')
-rw-r--r--sys/kern/kern_rwlock.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c
index 9f0b059280b9..ffe0e9ca8f39 100644
--- a/sys/kern/kern_rwlock.c
+++ b/sys/kern/kern_rwlock.c
@@ -929,9 +929,8 @@ __rw_wlock_hard(volatile uintptr_t *c, uintptr_t v, uintptr_t tid,
if ((v & RW_LOCK_READ) && RW_READERS(v) &&
spintries < rowner_retries) {
if (!(v & RW_LOCK_WRITE_SPINNER)) {
- if (!atomic_cmpset_ptr(&rw->rw_lock, v,
+ if (!atomic_fcmpset_ptr(&rw->rw_lock, &v,
v | RW_LOCK_WRITE_SPINNER)) {
- v = RW_READ_VALUE(rw);
continue;
}
}