Back to home page

OSCL-LXR

 
 

    


0001 #ifndef __LINUX_SPINLOCK_TYPES_RAW_H
0002 #define __LINUX_SPINLOCK_TYPES_RAW_H
0003 
0004 #include <linux/types.h>
0005 
0006 #if defined(CONFIG_SMP)
0007 # include <asm/spinlock_types.h>
0008 #else
0009 # include <linux/spinlock_types_up.h>
0010 #endif
0011 
0012 #include <linux/lockdep_types.h>
0013 
0014 typedef struct raw_spinlock {
0015     arch_spinlock_t raw_lock;
0016 #ifdef CONFIG_DEBUG_SPINLOCK
0017     unsigned int magic, owner_cpu;
0018     void *owner;
0019 #endif
0020 #ifdef CONFIG_DEBUG_LOCK_ALLOC
0021     struct lockdep_map dep_map;
0022 #endif
0023 } raw_spinlock_t;
0024 
0025 #define SPINLOCK_MAGIC      0xdead4ead
0026 
0027 #define SPINLOCK_OWNER_INIT ((void *)-1L)
0028 
0029 #ifdef CONFIG_DEBUG_LOCK_ALLOC
0030 # define RAW_SPIN_DEP_MAP_INIT(lockname)        \
0031     .dep_map = {                    \
0032         .name = #lockname,          \
0033         .wait_type_inner = LD_WAIT_SPIN,    \
0034     }
0035 # define SPIN_DEP_MAP_INIT(lockname)            \
0036     .dep_map = {                    \
0037         .name = #lockname,          \
0038         .wait_type_inner = LD_WAIT_CONFIG,  \
0039     }
0040 
0041 # define LOCAL_SPIN_DEP_MAP_INIT(lockname)      \
0042     .dep_map = {                    \
0043         .name = #lockname,          \
0044         .wait_type_inner = LD_WAIT_CONFIG,  \
0045         .lock_type = LD_LOCK_PERCPU,        \
0046     }
0047 #else
0048 # define RAW_SPIN_DEP_MAP_INIT(lockname)
0049 # define SPIN_DEP_MAP_INIT(lockname)
0050 # define LOCAL_SPIN_DEP_MAP_INIT(lockname)
0051 #endif
0052 
0053 #ifdef CONFIG_DEBUG_SPINLOCK
0054 # define SPIN_DEBUG_INIT(lockname)      \
0055     .magic = SPINLOCK_MAGIC,        \
0056     .owner_cpu = -1,            \
0057     .owner = SPINLOCK_OWNER_INIT,
0058 #else
0059 # define SPIN_DEBUG_INIT(lockname)
0060 #endif
0061 
0062 #define __RAW_SPIN_LOCK_INITIALIZER(lockname)   \
0063 {                       \
0064     .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,  \
0065     SPIN_DEBUG_INIT(lockname)       \
0066     RAW_SPIN_DEP_MAP_INIT(lockname) }
0067 
0068 #define __RAW_SPIN_LOCK_UNLOCKED(lockname)  \
0069     (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
0070 
0071 #define DEFINE_RAW_SPINLOCK(x)  raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
0072 
0073 #endif /* __LINUX_SPINLOCK_TYPES_RAW_H */