From bcbe8dc991a9ec63f30d50ed4cca89fd9e6b7ff7 Mon Sep 17 00:00:00 2001 From: Agustina Arzille Date: Fri, 5 May 2017 04:01:13 -1000 Subject: Replace sequential consistency with more efficient orders --- kern/rtmutex.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'kern/rtmutex.c') 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); -- cgit v1.2.3