svn commit: r327875 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Fri Jan 12 13:40:51 UTC 2018
Author: mjg
Date: Fri Jan 12 13:40:50 2018
New Revision: 327875
URL: https://svnweb.freebsd.org/changeset/base/327875
Log:
mtx: use fcmpset to cover setting MTX_CONTESTED
Modified:
head/sys/kern/kern_mutex.c
Modified: head/sys/kern/kern_mutex.c
==============================================================================
--- head/sys/kern/kern_mutex.c Fri Jan 12 13:39:02 2018 (r327874)
+++ head/sys/kern/kern_mutex.c Fri Jan 12 13:40:50 2018 (r327875)
@@ -578,6 +578,7 @@ __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v)
ts = turnstile_trywait(&m->lock_object);
v = MTX_READ_VALUE(m);
+retry_turnstile:
/*
* Check if the lock has been released while spinning for
@@ -609,10 +610,8 @@ __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v)
* or the state of the MTX_RECURSED bit changed.
*/
if ((v & MTX_CONTESTED) == 0 &&
- !atomic_cmpset_ptr(&m->mtx_lock, v, v | MTX_CONTESTED)) {
- turnstile_cancel(ts);
- v = MTX_READ_VALUE(m);
- continue;
+ !atomic_fcmpset_ptr(&m->mtx_lock, &v, v | MTX_CONTESTED)) {
+ goto retry_turnstile;
}
/*
More information about the svn-src-all
mailing list