]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/dde/linux26/include/linux/spinlock_types.h
e818e83b226961d14ea752fefe62ad81be40eaac
[l4.git] / l4 / pkg / dde / linux26 / include / linux / spinlock_types.h
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 #ifndef DDE_LINUX
13
14 #if defined(CONFIG_SMP)
15 # include <asm/spinlock_types.h>
16 #else
17 # include <linux/spinlock_types_up.h>
18 #endif
19
20 #include <linux/lockdep.h>
21
22 typedef struct {
23         raw_spinlock_t raw_lock;
24 #ifdef CONFIG_GENERIC_LOCKBREAK
25         unsigned int break_lock;
26 #endif
27 #ifdef CONFIG_DEBUG_SPINLOCK
28         unsigned int magic, owner_cpu;
29         void *owner;
30 #endif
31 #ifdef CONFIG_DEBUG_LOCK_ALLOC
32         struct lockdep_map dep_map;
33 #endif
34 } spinlock_t;
35
36 #define SPINLOCK_MAGIC          0xdead4ead
37
38 typedef struct {
39         raw_rwlock_t raw_lock;
40 #ifdef CONFIG_GENERIC_LOCKBREAK
41         unsigned int break_lock;
42 #endif
43 #ifdef CONFIG_DEBUG_SPINLOCK
44         unsigned int magic, owner_cpu;
45         void *owner;
46 #endif
47 #ifdef CONFIG_DEBUG_LOCK_ALLOC
48         struct lockdep_map dep_map;
49 #endif
50 } rwlock_t;
51
52 #define RWLOCK_MAGIC            0xdeaf1eed
53
54 #define SPINLOCK_OWNER_INIT     ((void *)-1L)
55
56 #ifdef CONFIG_DEBUG_LOCK_ALLOC
57 # define SPIN_DEP_MAP_INIT(lockname)    .dep_map = { .name = #lockname }
58 #else
59 # define SPIN_DEP_MAP_INIT(lockname)
60 #endif
61
62 #ifdef CONFIG_DEBUG_LOCK_ALLOC
63 # define RW_DEP_MAP_INIT(lockname)      .dep_map = { .name = #lockname }
64 #else
65 # define RW_DEP_MAP_INIT(lockname)
66 #endif
67
68 #ifdef CONFIG_DEBUG_SPINLOCK
69 # define __SPIN_LOCK_UNLOCKED(lockname)                                 \
70         (spinlock_t)    {       .raw_lock = __RAW_SPIN_LOCK_UNLOCKED,   \
71                                 .magic = SPINLOCK_MAGIC,                \
72                                 .owner = SPINLOCK_OWNER_INIT,           \
73                                 .owner_cpu = -1,                        \
74                                 SPIN_DEP_MAP_INIT(lockname) }
75 #define __RW_LOCK_UNLOCKED(lockname)                                    \
76         (rwlock_t)      {       .raw_lock = __RAW_RW_LOCK_UNLOCKED,     \
77                                 .magic = RWLOCK_MAGIC,                  \
78                                 .owner = SPINLOCK_OWNER_INIT,           \
79                                 .owner_cpu = -1,                        \
80                                 RW_DEP_MAP_INIT(lockname) }
81 #else
82 # define __SPIN_LOCK_UNLOCKED(lockname) \
83         (spinlock_t)    {       .raw_lock = __RAW_SPIN_LOCK_UNLOCKED,   \
84                                 SPIN_DEP_MAP_INIT(lockname) }
85 #define __RW_LOCK_UNLOCKED(lockname) \
86         (rwlock_t)      {       .raw_lock = __RAW_RW_LOCK_UNLOCKED,     \
87                                 RW_DEP_MAP_INIT(lockname) }
88 #endif
89
90 /*
91  * SPIN_LOCK_UNLOCKED and RW_LOCK_UNLOCKED defeat lockdep state tracking and
92  * are hence deprecated.
93  * Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or
94  * __SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate.
95  */
96 #define SPIN_LOCK_UNLOCKED      __SPIN_LOCK_UNLOCKED(old_style_spin_init)
97 #define RW_LOCK_UNLOCKED        __RW_LOCK_UNLOCKED(old_style_rw_init)
98
99 #define DEFINE_SPINLOCK(x)      spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
100 #define DEFINE_RWLOCK(x)        rwlock_t x = __RW_LOCK_UNLOCKED(x)
101
102 #else
103
104 #include <l4/dde/ddekit/lock.h>
105
106 typedef struct {
107         ddekit_lock_t ddekit_lock;
108         char          need_init;
109 } spinlock_t;
110
111 typedef spinlock_t rwlock_t;
112
113 #define SPIN_LOCK_UNLOCKED  (spinlock_t) { .ddekit_lock = NULL, .need_init = 1 }
114 #define RW_LOCK_UNLOCKED  (spinlock_t) { .ddekit_lock = NULL, .need_init = 1 }
115
116 #define __SPIN_LOCK_UNLOCKED(name)   SPIN_LOCK_UNLOCKED
117 #define __RW_LOCK_UNLOCKED(name)     RW_LOCK_UNLOCKED
118
119 #define DEFINE_SPINLOCK(x)      spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
120 #define DEFINE_RWLOCK(x)        rwlock_t x = __RW_LOCK_UNLOCKED(x)
121
122 #include <linux/lockdep.h>
123
124 #endif /* DDE_LINUX */
125
126 #endif /* __LINUX_SPINLOCK_TYPES_H */