23#ifndef __ARCH_SPINLOCK_H
24#define __ARCH_SPINLOCK_H
44#define SPINLOCK_INITIALIZER 0
72 __asm__ __volatile__(
"tas.b @%2\n\t"
74 :
"=r"(locked),
"=m"(*lock)
135static inline void __spinlock_scoped_cleanup(
spinlock_t **lock) {
139#define ___spinlock_lock_scoped(m, l) \
140 spinlock_t *__scoped_spinlock_##l __attribute__((cleanup(__spinlock_scoped_cleanup))) = (spinlock_lock(m), (m))
141#define __spinlock_lock_scoped(m, l) ___spinlock_lock_scoped(m, l)
152#define spinlock_lock_scoped(lock) \
153 __spinlock_lock_scoped((lock), __LINE__)
Various common macros used throughout the codebase.
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:117
static bool spinlock_trylock(spinlock_t *lock)
Try to lock, without spinning.
Definition spinlock.h:69
static void spinlock_init(spinlock_t *lock)
Initialize a spinlock.
Definition spinlock.h:53
static bool spinlock_is_locked(const spinlock_t *lock)
Determine if a lock is locked.
Definition spinlock.h:130
#define SPINLOCK_INITIALIZER
Spinlock initializer.
Definition spinlock.h:44
volatile int spinlock_t
Spinlock data type.
Definition spinlock.h:37
static void spinlock_lock(spinlock_t *lock)
Spin on a lock.
Definition spinlock.h:88
static bool spinlock_lock_irqsafe(spinlock_t *lock)
Spin on a lock.
Definition spinlock.h:102