1 #ifndef __LINUX_SPINLOCK_TYPES_H
2 #define __LINUX_SPINLOCK_TYPES_H
5 * include/linux/spinlock_types.h - generic spinlock type definitions
8 * portions Copyright 2005, Red Hat, Inc., Ingo Molnar
9 * Released under the General Public License (GPL).
14 #if defined(CONFIG_SMP)
15 # include <asm/spinlock_types.h>
17 # include <linux/spinlock_types_up.h>
20 #include <linux/lockdep.h>
23 raw_spinlock_t raw_lock;
24 #ifdef CONFIG_GENERIC_LOCKBREAK
25 unsigned int break_lock;
27 #ifdef CONFIG_DEBUG_SPINLOCK
28 unsigned int magic, owner_cpu;
31 #ifdef CONFIG_DEBUG_LOCK_ALLOC
32 struct lockdep_map dep_map;
36 #define SPINLOCK_MAGIC 0xdead4ead
39 raw_rwlock_t raw_lock;
40 #ifdef CONFIG_GENERIC_LOCKBREAK
41 unsigned int break_lock;
43 #ifdef CONFIG_DEBUG_SPINLOCK
44 unsigned int magic, owner_cpu;
47 #ifdef CONFIG_DEBUG_LOCK_ALLOC
48 struct lockdep_map dep_map;
52 #define RWLOCK_MAGIC 0xdeaf1eed
54 #define SPINLOCK_OWNER_INIT ((void *)-1L)
56 #ifdef CONFIG_DEBUG_LOCK_ALLOC
57 # define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
59 # define SPIN_DEP_MAP_INIT(lockname)
62 #ifdef CONFIG_DEBUG_LOCK_ALLOC
63 # define RW_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
65 # define RW_DEP_MAP_INIT(lockname)
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, \
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, \
80 RW_DEP_MAP_INIT(lockname) }
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) }
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.
96 #define SPIN_LOCK_UNLOCKED __SPIN_LOCK_UNLOCKED(old_style_spin_init)
97 #define RW_LOCK_UNLOCKED __RW_LOCK_UNLOCKED(old_style_rw_init)
99 #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
100 #define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x)
104 #include <l4/dde/ddekit/lock.h>
107 ddekit_lock_t ddekit_lock;
111 typedef spinlock_t rwlock_t;
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 }
116 #define __SPIN_LOCK_UNLOCKED(name) SPIN_LOCK_UNLOCKED
117 #define __RW_LOCK_UNLOCKED(name) RW_LOCK_UNLOCKED
119 #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
120 #define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x)
122 #include <linux/lockdep.h>
124 #endif /* DDE_LINUX */
126 #endif /* __LINUX_SPINLOCK_TYPES_H */