]> git.sesse.net Git - bcachefs-tools-debian/blob - include/linux/spinlock.h
Add upstream files
[bcachefs-tools-debian] / include / linux / spinlock.h
1 #ifndef __TOOLS_LINUX_SPINLOCK_H
2 #define __TOOLS_LINUX_SPINLOCK_H
3
4 #include <linux/atomic.h>
5
6 typedef struct {
7         int             count;
8 } raw_spinlock_t;
9
10 #define __RAW_SPIN_LOCK_UNLOCKED(name)  (raw_spinlock_t) { .count = 0 }
11
12 static inline void raw_spin_lock_init(raw_spinlock_t *lock)
13 {
14         smp_store_release(&lock->count, 0);
15 }
16
17 static inline void raw_spin_lock(raw_spinlock_t *lock)
18 {
19         while (xchg_acquire(&lock->count, 1))
20                 ;
21 }
22
23 static inline void raw_spin_unlock(raw_spinlock_t *lock)
24 {
25         smp_store_release(&lock->count, 0);
26 }
27
28 #define raw_spin_lock_irq(lock)         raw_spin_lock(lock)
29 #define raw_spin_unlock_irq(lock)       raw_spin_unlock(lock)
30
31 #define raw_spin_lock_irqsave(lock, flags)              \
32 do {                                                    \
33         flags = 0;                                      \
34         raw_spin_lock(lock);                            \
35 } while (0)
36
37 #define raw_spin_unlock_irqrestore(lock, flags) raw_spin_unlock(lock)
38
39 typedef raw_spinlock_t spinlock_t;
40
41 #define __SPIN_LOCK_UNLOCKED(name)      __RAW_SPIN_LOCK_UNLOCKED(name)
42
43 #define DEFINE_SPINLOCK(x)      spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
44
45 #define spin_lock_init(lock)            raw_spin_lock_init(lock)
46 #define spin_lock(lock)                 raw_spin_lock(lock)
47 #define spin_unlock(lock)               raw_spin_unlock(lock)
48
49 #define spin_lock_nested(lock, n)       spin_lock(lock)
50
51 #define spin_lock_bh(lock)              raw_spin_lock(lock)
52 #define spin_unlock_bh(lock)            raw_spin_unlock(lock)
53
54 #define spin_lock_irq(lock)             raw_spin_lock(lock)
55 #define spin_unlock_irq(lock)           raw_spin_unlock(lock)
56
57 #define spin_lock_irqsave(lock, flags)  raw_spin_lock_irqsave(lock, flags)
58 #define spin_unlock_irqrestore(lock, flags) raw_spin_unlock_irqrestore(lock, flags)
59
60 #endif /* __TOOLS_LINUX_SPINLOCK_H */