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 #include <linux/spinlock_types_raw.h> 13 14 typedef struct spinlock { 15 union { 16 struct raw_spinlock rlock; 17 18 #ifdef CONFIG_DEBUG_LOCK_ALLOC 19 # define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map)) 20 struct { 21 u8 __padding[LOCK_PADSIZE]; 22 struct lockdep_map dep_map; 23 }; 24 #endif 25 }; 26 } spinlock_t; 27 28 #define ___SPIN_LOCK_INITIALIZER(lockname) \ 29 { \ 30 .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ 31 SPIN_DEBUG_INIT(lockname) \ 32 SPIN_DEP_MAP_INIT(lockname) } 33 34 #define __SPIN_LOCK_INITIALIZER(lockname) \ 35 { { .rlock = ___SPIN_LOCK_INITIALIZER(lockname) } } 36 37 #define __SPIN_LOCK_UNLOCKED(lockname) \ 38 (spinlock_t) __SPIN_LOCK_INITIALIZER(lockname) 39 40 #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) 41 42 #include <linux/rwlock_types.h> 43 44 #endif /* __LINUX_SPINLOCK_TYPES_H */ 45