Rev 1408 | Rev 5272 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1408 | serge | 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 | |||
12 | #if defined(CONFIG_SMP) |
||
13 | # include |
||
14 | #else |
||
15 | # include |
||
16 | #endif |
||
17 | |||
18 | #include |
||
19 | |||
3243 | Serge | 20 | typedef struct spinlock { |
1408 | serge | 21 | raw_spinlock_t raw_lock; |
22 | #ifdef CONFIG_GENERIC_LOCKBREAK |
||
23 | unsigned int break_lock; |
||
24 | #endif |
||
25 | #ifdef CONFIG_DEBUG_SPINLOCK |
||
26 | unsigned int magic, owner_cpu; |
||
27 | void *owner; |
||
28 | #endif |
||
29 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
||
30 | struct lockdep_map dep_map; |
||
31 | #endif |
||
32 | } spinlock_t; |
||
33 | |||
34 | #define SPINLOCK_MAGIC 0xdead4ead |
||
35 | |||
36 | typedef struct { |
||
37 | raw_rwlock_t raw_lock; |
||
38 | #ifdef CONFIG_GENERIC_LOCKBREAK |
||
39 | unsigned int break_lock; |
||
40 | #endif |
||
41 | #ifdef CONFIG_DEBUG_SPINLOCK |
||
42 | unsigned int magic, owner_cpu; |
||
43 | void *owner; |
||
44 | #endif |
||
45 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
||
46 | struct lockdep_map dep_map; |
||
47 | #endif |
||
48 | } rwlock_t; |
||
49 | |||
50 | #define RWLOCK_MAGIC 0xdeaf1eed |
||
51 | |||
52 | #define SPINLOCK_OWNER_INIT ((void *)-1L) |
||
53 | |||
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 | |||
66 | #ifdef CONFIG_DEBUG_SPINLOCK |
||
67 | # define __SPIN_LOCK_UNLOCKED(lockname) \ |
||
68 | (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \ |
||
69 | .magic = SPINLOCK_MAGIC, \ |
||
70 | .owner = SPINLOCK_OWNER_INIT, \ |
||
71 | .owner_cpu = -1, \ |
||
72 | SPIN_DEP_MAP_INIT(lockname) } |
||
73 | #define __RW_LOCK_UNLOCKED(lockname) \ |
||
74 | (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED, \ |
||
75 | .magic = RWLOCK_MAGIC, \ |
||
76 | .owner = SPINLOCK_OWNER_INIT, \ |
||
77 | .owner_cpu = -1, \ |
||
78 | RW_DEP_MAP_INIT(lockname) } |
||
79 | #else |
||
80 | # define __SPIN_LOCK_UNLOCKED(lockname) \ |
||
81 | (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \ |
||
82 | SPIN_DEP_MAP_INIT(lockname) } |
||
83 | #define __RW_LOCK_UNLOCKED(lockname) \ |
||
84 | (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED, \ |
||
85 | RW_DEP_MAP_INIT(lockname) } |
||
86 | #endif |
||
87 | |||
88 | /* |
||
89 | * SPIN_LOCK_UNLOCKED and RW_LOCK_UNLOCKED defeat lockdep state tracking and |
||
90 | * are hence deprecated. |
||
91 | * Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or |
||
92 | * __SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate. |
||
93 | */ |
||
94 | #define SPIN_LOCK_UNLOCKED __SPIN_LOCK_UNLOCKED(old_style_spin_init) |
||
95 | #define RW_LOCK_UNLOCKED __RW_LOCK_UNLOCKED(old_style_rw_init) |
||
96 | |||
97 | #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) |
||
98 | #define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x) |
||
99 | |||
100 | #endif /* __LINUX_SPINLOCK_TYPES_H */ |