#include #include #include "spinlock.h" #include "hal/hal.h" void spinlock_init(SpinLock *sl) { atomic_store(&sl->lock, false); } void spinlock_acquire(SpinLock *sl) { bool unlocked = false; while (!atomic_compare_exchange_weak(&sl->lock, &unlocked, true)) { unlocked = false; SPINLOCK_HINT(); } hal_intr_disable(); } void spinlock_release(SpinLock *sl) { atomic_store(&sl->lock, false); hal_intr_enable(); }