summaryrefslogtreecommitdiff
path: root/kern/rtmutex.c
diff options
context:
space:
mode:
authorAgustina Arzille <avarzille@riseup.net>2017-05-05 04:01:13 -1000
committerRichard Braun <rbraun@sceen.net>2017-05-09 21:17:58 +0200
commitbcbe8dc991a9ec63f30d50ed4cca89fd9e6b7ff7 (patch)
tree389517510b8d19082d02f36453dbf68356b548fb /kern/rtmutex.c
parentb5864f82b9c0d8ea2e825e7d86bd8cdeb825f870 (diff)
Replace sequential consistency with more efficient orders
Diffstat (limited to 'kern/rtmutex.c')
-rw-r--r--kern/rtmutex.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/kern/rtmutex.c b/kern/rtmutex.c
index 3f4251f0..6f639ddf 100644
--- a/kern/rtmutex.c
+++ b/kern/rtmutex.c
@@ -29,7 +29,7 @@
static void
rtmutex_set_contended(struct rtmutex *rtmutex)
{
- atomic_or(&rtmutex->owner, RTMUTEX_CONTENDED, ATOMIC_SEQ_CST);
+ atomic_or_acq_rel(&rtmutex->owner, RTMUTEX_CONTENDED);
}
void
@@ -49,7 +49,7 @@ rtmutex_lock_slow(struct rtmutex *rtmutex)
bits = RTMUTEX_CONTENDED;
for (;;) {
- prev_owner = atomic_cas_seq_cst(&rtmutex->owner, bits, owner | bits);
+ prev_owner = atomic_cas_acquire(&rtmutex->owner, bits, owner | bits);
assert((prev_owner & bits) == bits);
if (prev_owner == bits) {
@@ -64,7 +64,7 @@ rtmutex_lock_slow(struct rtmutex *rtmutex)
turnstile_own(turnstile);
if (turnstile_empty(turnstile)) {
- prev_owner = atomic_swap_seq_cst(&rtmutex->owner, owner);
+ prev_owner = atomic_swap_acquire(&rtmutex->owner, owner);
assert(prev_owner == (owner | bits));
}
@@ -89,7 +89,7 @@ rtmutex_unlock_slow(struct rtmutex *rtmutex)
turnstile = turnstile_acquire(rtmutex);
assert(turnstile != NULL);
- prev_owner = atomic_swap_seq_cst(&rtmutex->owner,
+ prev_owner = atomic_swap_release(&rtmutex->owner,
RTMUTEX_FORCE_WAIT | RTMUTEX_CONTENDED);
assert((prev_owner & RTMUTEX_OWNER_MASK) == owner);