diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2017-11-11 09:34:11 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2017-11-11 09:34:11 +0000 |
commit | c7e4e92ecd66cdfd0b2eaad220bf69a5d7877855 (patch) | |
tree | cb3db6bf9f8bd2e221f534a548be588045e62ec4 /sys/kern/kern_rwlock.c | |
parent | 7a9e3b169fbbe3a06c671bd0eac43f407cd642a4 (diff) | |
download | src-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.c | 3 |
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; } } |