summaryrefslogtreecommitdiff
path: root/kern/spinlock.c
diff options
context:
space:
mode:
Diffstat (limited to 'kern/spinlock.c')
-rw-r--r--kern/spinlock.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/kern/spinlock.c b/kern/spinlock.c
index 948d93cf..0e6f2fa8 100644
--- a/kern/spinlock.c
+++ b/kern/spinlock.c
@@ -56,6 +56,7 @@
#include <stddef.h>
#include <kern/assert.h>
+#include <kern/atomic.h>
#include <kern/error.h>
#include <kern/macros.h>
#include <kern/percpu.h>
@@ -63,7 +64,6 @@
#include <kern/spinlock_i.h>
#include <kern/spinlock_types.h>
#include <kern/thread.h>
-#include <machine/atomic.h>
#include <machine/cpu.h>
#include <machine/mb.h>
@@ -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_uint(&lock->value, oldval, newval);
+ prev = atomic_cas_seq_cst(&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_uint(&lock->value, oldval, newval);
+ prev = atomic_cas_seq_cst(&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_uint(&lock->value, oldqid, SPINLOCK_QID_LOCKED);
+ prev = atomic_cas_seq_cst(&lock->value, oldqid, SPINLOCK_QID_LOCKED);
assert((prev >> SPINLOCK_QID_MAX_BITS) == 0);
assert(prev != SPINLOCK_QID_NULL);