xref: /linux/include/linux/spinlock_types_raw.h (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1 #ifndef __LINUX_SPINLOCK_TYPES_RAW_H
2 #define __LINUX_SPINLOCK_TYPES_RAW_H
3 
4 #include <linux/types.h>
5 
6 #if defined(CONFIG_SMP)
7 # include <asm/spinlock_types.h>
8 #else
9 # include <linux/spinlock_types_up.h>
10 #endif
11 
12 #include <linux/lockdep_types.h>
13 
14 context_lock_struct(raw_spinlock) {
15 	arch_spinlock_t raw_lock;
16 #ifdef CONFIG_DEBUG_SPINLOCK
17 	unsigned int magic, owner_cpu;
18 	void *owner;
19 #endif
20 #ifdef CONFIG_DEBUG_LOCK_ALLOC
21 	struct lockdep_map dep_map;
22 #endif
23 };
24 typedef struct raw_spinlock raw_spinlock_t;
25 
26 #define SPINLOCK_MAGIC		0xdead4ead
27 
28 #define SPINLOCK_OWNER_INIT	((void *)-1L)
29 
30 #ifdef CONFIG_DEBUG_LOCK_ALLOC
31 # define RAW_SPIN_DEP_MAP_INIT(lockname)		\
32 	.dep_map = {					\
33 		.name = #lockname,			\
34 		.wait_type_inner = LD_WAIT_SPIN,	\
35 	}
36 # define SPIN_DEP_MAP_INIT(lockname)			\
37 	.dep_map = {					\
38 		.name = #lockname,			\
39 		.wait_type_inner = LD_WAIT_CONFIG,	\
40 	}
41 
42 # define LOCAL_SPIN_DEP_MAP_INIT(lockname)		\
43 	.dep_map = {					\
44 		.name = #lockname,			\
45 		.wait_type_inner = LD_WAIT_CONFIG,	\
46 		.lock_type = LD_LOCK_PERCPU,		\
47 	}
48 #else
49 # define RAW_SPIN_DEP_MAP_INIT(lockname)
50 # define SPIN_DEP_MAP_INIT(lockname)
51 # define LOCAL_SPIN_DEP_MAP_INIT(lockname)
52 #endif
53 
54 #ifdef CONFIG_DEBUG_SPINLOCK
55 # define SPIN_DEBUG_INIT(lockname)		\
56 	.magic = SPINLOCK_MAGIC,		\
57 	.owner_cpu = -1,			\
58 	.owner = SPINLOCK_OWNER_INIT,
59 #else
60 # define SPIN_DEBUG_INIT(lockname)
61 #endif
62 
63 #define __RAW_SPIN_LOCK_INITIALIZER(lockname)	\
64 {						\
65 	.raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,	\
66 	SPIN_DEBUG_INIT(lockname)		\
67 	RAW_SPIN_DEP_MAP_INIT(lockname) }
68 
69 #define __RAW_SPIN_LOCK_UNLOCKED(lockname)	\
70 	(raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
71 
72 #define DEFINE_RAW_SPINLOCK(x)  raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
73 
74 #endif /* __LINUX_SPINLOCK_TYPES_RAW_H */
75