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