diff options
author | Agustina Arzille <avarzille@riseup.net> | 2017-05-05 04:01:13 -1000 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-05-09 21:17:58 +0200 |
commit | bcbe8dc991a9ec63f30d50ed4cca89fd9e6b7ff7 (patch) | |
tree | 389517510b8d19082d02f36453dbf68356b548fb /kern/spinlock.c | |
parent | b5864f82b9c0d8ea2e825e7d86bd8cdeb825f870 (diff) |
Replace sequential consistency with more efficient orders
Diffstat (limited to 'kern/spinlock.c')
-rw-r--r-- | kern/spinlock.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/kern/spinlock.c b/kern/spinlock.c index 8f42e9c2..f341406f 100644 --- a/kern/spinlock.c +++ b/kern/spinlock.c @@ -196,7 +196,7 @@ spinlock_store_first_qid(struct spinlock *lock, unsigned int newqid) do { oldval = read_once(lock->value); newval = newqid | (oldval & SPINLOCK_QID_MASK); - prev = atomic_cas_seq_cst(&lock->value, oldval, newval); + prev = atomic_cas_acquire(&lock->value, oldval, newval); } while (prev != oldval); } @@ -220,7 +220,7 @@ spinlock_swap_last_qid(struct spinlock *lock, unsigned int newqid) oldval = read_once(lock->value); newval = (oldval & (SPINLOCK_QID_MASK << SPINLOCK_QID_MAX_BITS)) | newqid; - prev = atomic_cas_seq_cst(&lock->value, oldval, newval); + prev = atomic_cas_acquire(&lock->value, oldval, newval); } while (prev != oldval); return prev & SPINLOCK_QID_MASK; @@ -231,7 +231,7 @@ spinlock_try_downgrade(struct spinlock *lock, unsigned int oldqid) { unsigned int prev; - prev = atomic_cas_seq_cst(&lock->value, oldqid, SPINLOCK_QID_LOCKED); + prev = atomic_cas_acquire(&lock->value, oldqid, SPINLOCK_QID_LOCKED); assert((prev >> SPINLOCK_QID_MAX_BITS) == 0); assert(prev != SPINLOCK_QID_NULL); |