3 #ifndef ARCH_SMP_SPINLOCK_H
4 #define ARCH_SMP_SPINLOCK_H
13 volatile unsigned int lock;
16 #define SPIN_LOCK_UNLOCKED { 1 }
18 #define DECLARE_SPIN_LOCK(x) \
19 static spinlock_t x = SPIN_LOCK_UNLOCKED;
27 #define barrier() __asm__ __volatile__("" : : : "memory")
28 #define spin_is_locked(x) (*(volatile int *)(&(x)->lock) <= 0)
29 #define spin_unlock_wait(x) do { barrier(); } while (spin_is_locked(x))
32 #define spin_lock_string \
34 "lock ; decl %0\n\t" \
36 ".section .text.lock,\"ax\"\n" \
47 #define spin_unlock_string \
54 :
"=m" (
lock->lock) : :
"memory");
67 :
"=m" (
lock->lock) : :
"memory");
static __always_inline void spin_unlock(spinlock_t *lock)
#define spin_unlock_string
static __always_inline void spin_lock(spinlock_t *lock)
void thread_coop_enable(void)
void thread_coop_disable(void)
static void lock(void *unused)
volatile unsigned int lock