replace stdatomic.h with zinnia/atomic.h

This commit is contained in:
2026-10-14 00:05:32 +02:00
parent f9a456b09d
commit 4c781f31ad
12 changed files with 92 additions and 189 deletions
+5 -5
View File
@@ -1,6 +1,6 @@
#include <zinnia/atomic.h>
#include <zinnia/irq.h>
#include <zinnia/spin.h>
#include <stdatomic.h>
void spin_init(struct spinlock* spin) {
spin->next = 0;
@@ -9,15 +9,15 @@ void spin_init(struct spinlock* spin) {
void spin_lock(struct spinlock* spin) {
irq_lock();
uint32_t my = atomic_fetch_add_explicit(&spin->next, 1, memory_order_relaxed);
uint32_t my = atomic_fetch_add(&spin->next, 1, ATOMIC_RELAXED);
while (atomic_load_explicit(&spin->owner, memory_order_acquire) != my) {
while (atomic_load(&spin->owner, ATOMIC_ACQUIRE) != my) {
asm volatile("pause");
}
}
void spin_unlock(struct spinlock* spin) {
uint32_t val = atomic_load_explicit(&spin->owner, memory_order_relaxed);
atomic_store_explicit(&spin->owner, val + 1, memory_order_release);
uint32_t val = atomic_load(&spin->owner, ATOMIC_RELAXED);
atomic_store(&spin->owner, val + 1, ATOMIC_RELEASE);
irq_unlock();
}