]>
Commit | Line | Data |
---|---|---|
4f084ca7 TG |
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 | typedef 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 | } raw_spinlock_t; | |
24 | ||
25 | #define SPINLOCK_MAGIC 0xdead4ead | |
26 | ||
27 | #define SPINLOCK_OWNER_INIT ((void *)-1L) | |
28 | ||
29 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | |
30 | # define RAW_SPIN_DEP_MAP_INIT(lockname) \ | |
31 | .dep_map = { \ | |
32 | .name = #lockname, \ | |
33 | .wait_type_inner = LD_WAIT_SPIN, \ | |
34 | } | |
35 | # define SPIN_DEP_MAP_INIT(lockname) \ | |
36 | .dep_map = { \ | |
37 | .name = #lockname, \ | |
38 | .wait_type_inner = LD_WAIT_CONFIG, \ | |
39 | } | |
31552385 TG |
40 | |
41 | # define LOCAL_SPIN_DEP_MAP_INIT(lockname) \ | |
42 | .dep_map = { \ | |
43 | .name = #lockname, \ | |
44 | .wait_type_inner = LD_WAIT_CONFIG, \ | |
45 | .lock_type = LD_LOCK_PERCPU, \ | |
46 | } | |
4f084ca7 TG |
47 | #else |
48 | # define RAW_SPIN_DEP_MAP_INIT(lockname) | |
49 | # define SPIN_DEP_MAP_INIT(lockname) | |
31552385 | 50 | # define LOCAL_SPIN_DEP_MAP_INIT(lockname) |
4f084ca7 TG |
51 | #endif |
52 | ||
53 | #ifdef CONFIG_DEBUG_SPINLOCK | |
54 | # define SPIN_DEBUG_INIT(lockname) \ | |
55 | .magic = SPINLOCK_MAGIC, \ | |
56 | .owner_cpu = -1, \ | |
57 | .owner = SPINLOCK_OWNER_INIT, | |
58 | #else | |
59 | # define SPIN_DEBUG_INIT(lockname) | |
60 | #endif | |
61 | ||
62 | #define __RAW_SPIN_LOCK_INITIALIZER(lockname) \ | |
63 | { \ | |
64 | .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ | |
65 | SPIN_DEBUG_INIT(lockname) \ | |
66 | RAW_SPIN_DEP_MAP_INIT(lockname) } | |
67 | ||
68 | #define __RAW_SPIN_LOCK_UNLOCKED(lockname) \ | |
69 | (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname) | |
70 | ||
71 | #define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x) | |
72 | ||
73 | #endif /* __LINUX_SPINLOCK_TYPES_RAW_H */ |