1 #ifndef __LINUX_RWLOCK_TYPES_H 2 #define __LINUX_RWLOCK_TYPES_H 3 4 /* 5 * include/linux/rwlock_types.h - generic rwlock 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 typedef struct { 12 arch_rwlock_t raw_lock; 13 #ifdef CONFIG_DEBUG_SPINLOCK 14 unsigned int magic, owner_cpu; 15 void *owner; 16 #endif 17 #ifdef CONFIG_DEBUG_LOCK_ALLOC 18 struct lockdep_map dep_map; 19 #endif 20 } rwlock_t; 21 22 #define RWLOCK_MAGIC 0xdeaf1eed 23 24 #ifdef CONFIG_DEBUG_LOCK_ALLOC 25 # define RW_DEP_MAP_INIT(lockname) \ 26 .dep_map = { \ 27 .name = #lockname, \ 28 .wait_type_inner = LD_WAIT_CONFIG, \ 29 } 30 #else 31 # define RW_DEP_MAP_INIT(lockname) 32 #endif 33 34 #ifdef CONFIG_DEBUG_SPINLOCK 35 #define __RW_LOCK_UNLOCKED(lockname) \ 36 (rwlock_t) { .raw_lock = __ARCH_RW_LOCK_UNLOCKED, \ 37 .magic = RWLOCK_MAGIC, \ 38 .owner = SPINLOCK_OWNER_INIT, \ 39 .owner_cpu = -1, \ 40 RW_DEP_MAP_INIT(lockname) } 41 #else 42 #define __RW_LOCK_UNLOCKED(lockname) \ 43 (rwlock_t) { .raw_lock = __ARCH_RW_LOCK_UNLOCKED, \ 44 RW_DEP_MAP_INIT(lockname) } 45 #endif 46 47 #define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x) 48 49 #endif /* __LINUX_RWLOCK_TYPES_H */ 50