25#ifndef __ARCH_SPINLOCK_H
26#define __ARCH_SPINLOCK_H
46#define SPINLOCK_INITIALIZER 0
74 __asm__ __volatile__(
"tas.b @%2\n\t"
76 :
"=r"(locked),
"=m"(*lock)
137static inline void __spinlock_scoped_cleanup(
spinlock_t **lock) {
141#define ___spinlock_lock_scoped(m, l) \
142 spinlock_t *__scoped_spinlock_##l __attribute__((cleanup(__spinlock_scoped_cleanup))) = (spinlock_lock(m), (m))
143#define __spinlock_lock_scoped(m, l) ___spinlock_lock_scoped(m, l)
154#define spinlock_lock_scoped(lock) \
155 __spinlock_lock_scoped((lock), __LINE__)
int irq_inside_int(void)
Returns whether inside of an interrupt context.
void thd_pass(void)
Throw away the current thread's timeslice.
static void spinlock_unlock(spinlock_t *lock)
Free a lock.
Definition spinlock.h:119
static bool spinlock_trylock(spinlock_t *lock)
Try to lock, without spinning.
Definition spinlock.h:71
static void spinlock_init(spinlock_t *lock)
Initialize a spinlock.
Definition spinlock.h:55
#define SPINLOCK_INITIALIZER
Spinlock initializer.
Definition spinlock.h:46
volatile int spinlock_t
Spinlock data type.
Definition spinlock.h:39
static void spinlock_lock(spinlock_t *lock)
Spin on a lock.
Definition spinlock.h:90
static bool spinlock_is_locked(spinlock_t *lock)
Determine if a lock is locked.
Definition spinlock.h:132
static bool spinlock_lock_irqsafe(spinlock_t *lock)
Spin on a lock.
Definition spinlock.h:104