1 #ifndef __LINUX_SPINLOCK_TYPES_RAW_H
2 #define __LINUX_SPINLOCK_TYPES_RAW_H
4 #if defined(CONFIG_SMP)
5 # include <asm/spinlock_types.h>
7 # include <linux/spinlock_types_up.h>
10 #include <linux/lockdep.h>
12 typedef struct raw_spinlock {
13 arch_spinlock_t raw_lock;
14 #ifdef CONFIG_GENERIC_LOCKBREAK
15 unsigned int break_lock;
17 #ifdef CONFIG_DEBUG_SPINLOCK
18 unsigned int magic, owner_cpu;
21 #ifdef CONFIG_DEBUG_LOCK_ALLOC
22 struct lockdep_map dep_map;
26 #define SPINLOCK_MAGIC 0xdead4ead
28 #define SPINLOCK_OWNER_INIT ((void *)-1L)
30 #ifdef CONFIG_DEBUG_LOCK_ALLOC
31 # define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
33 # define SPIN_DEP_MAP_INIT(lockname)
36 #ifdef CONFIG_DEBUG_SPINLOCK
37 # define SPIN_DEBUG_INIT(lockname) \
38 .magic = SPINLOCK_MAGIC, \
40 .owner = SPINLOCK_OWNER_INIT,
42 # define SPIN_DEBUG_INIT(lockname)
45 #define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
47 .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
48 SPIN_DEBUG_INIT(lockname) \
49 SPIN_DEP_MAP_INIT(lockname) }
51 #define __RAW_SPIN_LOCK_UNLOCKED(lockname) \
52 (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
54 #define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)