hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/include/linux/spinlock_types.h
....@@ -9,15 +9,93 @@
99 * Released under the General Public License (GPL).
1010 */
1111
12
-#include <linux/spinlock_types_raw.h>
13
-
14
-#ifndef CONFIG_PREEMPT_RT
15
-# include <linux/spinlock_types_nort.h>
16
-# include <linux/rwlock_types.h>
12
+#if defined(CONFIG_SMP)
13
+# include <asm/spinlock_types.h>
1714 #else
18
-# include <linux/rtmutex.h>
19
-# include <linux/spinlock_types_rt.h>
20
-# include <linux/rwlock_types_rt.h>
15
+# include <linux/spinlock_types_up.h>
2116 #endif
2217
18
+#include <linux/lockdep_types.h>
19
+
20
+typedef struct raw_spinlock {
21
+ arch_spinlock_t raw_lock;
22
+#ifdef CONFIG_DEBUG_SPINLOCK
23
+ unsigned int magic, owner_cpu;
24
+ void *owner;
25
+#endif
26
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
27
+ struct lockdep_map dep_map;
28
+#endif
29
+} raw_spinlock_t;
30
+
31
+#define SPINLOCK_MAGIC 0xdead4ead
32
+
33
+#define SPINLOCK_OWNER_INIT ((void *)-1L)
34
+
35
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
36
+# define RAW_SPIN_DEP_MAP_INIT(lockname) \
37
+ .dep_map = { \
38
+ .name = #lockname, \
39
+ .wait_type_inner = LD_WAIT_SPIN, \
40
+ }
41
+# define SPIN_DEP_MAP_INIT(lockname) \
42
+ .dep_map = { \
43
+ .name = #lockname, \
44
+ .wait_type_inner = LD_WAIT_CONFIG, \
45
+ }
46
+#else
47
+# define RAW_SPIN_DEP_MAP_INIT(lockname)
48
+# define SPIN_DEP_MAP_INIT(lockname)
49
+#endif
50
+
51
+#ifdef CONFIG_DEBUG_SPINLOCK
52
+# define SPIN_DEBUG_INIT(lockname) \
53
+ .magic = SPINLOCK_MAGIC, \
54
+ .owner_cpu = -1, \
55
+ .owner = SPINLOCK_OWNER_INIT,
56
+#else
57
+# define SPIN_DEBUG_INIT(lockname)
58
+#endif
59
+
60
+#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
61
+ { \
62
+ .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
63
+ SPIN_DEBUG_INIT(lockname) \
64
+ RAW_SPIN_DEP_MAP_INIT(lockname) }
65
+
66
+#define __RAW_SPIN_LOCK_UNLOCKED(lockname) \
67
+ (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
68
+
69
+#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
70
+
71
+typedef struct spinlock {
72
+ union {
73
+ struct raw_spinlock rlock;
74
+
75
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
76
+# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
77
+ struct {
78
+ u8 __padding[LOCK_PADSIZE];
79
+ struct lockdep_map dep_map;
80
+ };
81
+#endif
82
+ };
83
+} spinlock_t;
84
+
85
+#define ___SPIN_LOCK_INITIALIZER(lockname) \
86
+ { \
87
+ .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
88
+ SPIN_DEBUG_INIT(lockname) \
89
+ SPIN_DEP_MAP_INIT(lockname) }
90
+
91
+#define __SPIN_LOCK_INITIALIZER(lockname) \
92
+ { { .rlock = ___SPIN_LOCK_INITIALIZER(lockname) } }
93
+
94
+#define __SPIN_LOCK_UNLOCKED(lockname) \
95
+ (spinlock_t) __SPIN_LOCK_INITIALIZER(lockname)
96
+
97
+#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
98
+
99
+#include <linux/rwlock_types.h>
100
+
23101 #endif /* __LINUX_SPINLOCK_TYPES_H */