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 #if defined(CONFIG_SMP) 13 # include <asm/spinlock_types.h> 14 #else 15 # include <linux/spinlock_types_up.h> 16 #endif 17 18 typedef struct { 19 raw_spinlock_t raw_lock; 20 #if defined(CONFIG_PREEMPT) && defined(CONFIG_SMP) 21 unsigned int break_lock; 22 #endif 23 #ifdef CONFIG_DEBUG_SPINLOCK 24 unsigned int magic, owner_cpu; 25 void *owner; 26 #endif 27 } spinlock_t; 28 29 #define SPINLOCK_MAGIC 0xdead4ead 30 31 typedef struct { 32 raw_rwlock_t raw_lock; 33 #if defined(CONFIG_PREEMPT) && defined(CONFIG_SMP) 34 unsigned int break_lock; 35 #endif 36 #ifdef CONFIG_DEBUG_SPINLOCK 37 unsigned int magic, owner_cpu; 38 void *owner; 39 #endif 40 } rwlock_t; 41 42 #define RWLOCK_MAGIC 0xdeaf1eed 43 44 #define SPINLOCK_OWNER_INIT ((void *)-1L) 45 46 #ifdef CONFIG_DEBUG_SPINLOCK 47 # define SPIN_LOCK_UNLOCKED \ 48 (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \ 49 .magic = SPINLOCK_MAGIC, \ 50 .owner = SPINLOCK_OWNER_INIT, \ 51 .owner_cpu = -1 } 52 #define RW_LOCK_UNLOCKED \ 53 (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED, \ 54 .magic = RWLOCK_MAGIC, \ 55 .owner = SPINLOCK_OWNER_INIT, \ 56 .owner_cpu = -1 } 57 #else 58 # define SPIN_LOCK_UNLOCKED \ 59 (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED } 60 #define RW_LOCK_UNLOCKED \ 61 (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED } 62 #endif 63 64 #define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED 65 #define DEFINE_RWLOCK(x) rwlock_t x = RW_LOCK_UNLOCKED 66 67 #endif /* __LINUX_SPINLOCK_TYPES_H */ 68