Commit | Line | Data |
---|---|---|
fb1c8f93 IM |
1 | #ifndef __LINUX_SPINLOCK_TYPES_H |
2 | #define __LINUX_SPINLOCK_TYPES_H | |
3 | ||
4 | /* | |
5 | * include/linux/spinlock_types.h - generic spinlock type definitions | |
6 | * and initializers | |
7 | * | |
8 | * portions Copyright 2005, Red Hat, Inc., Ingo Molnar | |
9 | * Released under the General Public License (GPL). | |
10 | */ | |
11 | ||
8a25d5de IM |
12 | #include <linux/lockdep.h> |
13 | ||
fb1c8f93 IM |
14 | #if defined(CONFIG_SMP) |
15 | # include <asm/spinlock_types.h> | |
16 | #else | |
17 | # include <linux/spinlock_types_up.h> | |
18 | #endif | |
19 | ||
20 | typedef struct { | |
21 | raw_spinlock_t raw_lock; | |
22 | #if defined(CONFIG_PREEMPT) && defined(CONFIG_SMP) | |
23 | unsigned int break_lock; | |
24 | #endif | |
25 | #ifdef CONFIG_DEBUG_SPINLOCK | |
26 | unsigned int magic, owner_cpu; | |
27 | void *owner; | |
28 | #endif | |
8a25d5de IM |
29 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
30 | struct lockdep_map dep_map; | |
31 | #endif | |
fb1c8f93 IM |
32 | } spinlock_t; |
33 | ||
34 | #define SPINLOCK_MAGIC 0xdead4ead | |
35 | ||
36 | typedef struct { | |
37 | raw_rwlock_t raw_lock; | |
38 | #if defined(CONFIG_PREEMPT) && defined(CONFIG_SMP) | |
39 | unsigned int break_lock; | |
40 | #endif | |
41 | #ifdef CONFIG_DEBUG_SPINLOCK | |
42 | unsigned int magic, owner_cpu; | |
43 | void *owner; | |
44 | #endif | |
8a25d5de IM |
45 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
46 | struct lockdep_map dep_map; | |
47 | #endif | |
fb1c8f93 IM |
48 | } rwlock_t; |
49 | ||
50 | #define RWLOCK_MAGIC 0xdeaf1eed | |
51 | ||
52 | #define SPINLOCK_OWNER_INIT ((void *)-1L) | |
53 | ||
8a25d5de IM |
54 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
55 | # define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname } | |
56 | #else | |
57 | # define SPIN_DEP_MAP_INIT(lockname) | |
58 | #endif | |
59 | ||
60 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | |
61 | # define RW_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname } | |
62 | #else | |
63 | # define RW_DEP_MAP_INIT(lockname) | |
64 | #endif | |
65 | ||
fb1c8f93 | 66 | #ifdef CONFIG_DEBUG_SPINLOCK |
e4d91918 | 67 | # define __SPIN_LOCK_UNLOCKED(lockname) \ |
fb1c8f93 IM |
68 | (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \ |
69 | .magic = SPINLOCK_MAGIC, \ | |
70 | .owner = SPINLOCK_OWNER_INIT, \ | |
8a25d5de IM |
71 | .owner_cpu = -1, \ |
72 | SPIN_DEP_MAP_INIT(lockname) } | |
e4d91918 | 73 | #define __RW_LOCK_UNLOCKED(lockname) \ |
fb1c8f93 IM |
74 | (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED, \ |
75 | .magic = RWLOCK_MAGIC, \ | |
76 | .owner = SPINLOCK_OWNER_INIT, \ | |
8a25d5de IM |
77 | .owner_cpu = -1, \ |
78 | RW_DEP_MAP_INIT(lockname) } | |
fb1c8f93 | 79 | #else |
e4d91918 | 80 | # define __SPIN_LOCK_UNLOCKED(lockname) \ |
8a25d5de IM |
81 | (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \ |
82 | SPIN_DEP_MAP_INIT(lockname) } | |
e4d91918 | 83 | #define __RW_LOCK_UNLOCKED(lockname) \ |
8a25d5de IM |
84 | (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED, \ |
85 | RW_DEP_MAP_INIT(lockname) } | |
fb1c8f93 IM |
86 | #endif |
87 | ||
e4d91918 IM |
88 | #define SPIN_LOCK_UNLOCKED __SPIN_LOCK_UNLOCKED(old_style_spin_init) |
89 | #define RW_LOCK_UNLOCKED __RW_LOCK_UNLOCKED(old_style_rw_init) | |
90 | ||
91 | #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) | |
92 | #define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x) | |
fb1c8f93 IM |
93 | |
94 | #endif /* __LINUX_SPINLOCK_TYPES_H */ |