Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 #include <linux/lockdep.h>
 19 
 20 typedef struct {
 21         raw_spinlock_t raw_lock;
 22 #ifdef CONFIG_GENERIC_LOCKBREAK
 23         unsigned int break_lock;
 24 #endif
 25 #ifdef CONFIG_DEBUG_SPINLOCK
 26         unsigned int magic, owner_cpu;
 27         void *owner;
 28 #endif
 29 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 30         struct lockdep_map dep_map;
 31 #endif
 32 } spinlock_t;
 33 
 34 #define SPINLOCK_MAGIC          0xdead4ead
 35 
 36 typedef struct {
 37         raw_rwlock_t raw_lock;
 38 #ifdef CONFIG_GENERIC_LOCKBREAK
 39         unsigned int break_lock;
 40 #endif
 41 #ifdef CONFIG_DEBUG_SPINLOCK
 42         unsigned int magic, owner_cpu;
 43         void *owner;
 44 #endif
 45 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 46         struct lockdep_map dep_map;
 47 #endif
 48 } rwlock_t;
 49 
 50 #define RWLOCK_MAGIC            0xdeaf1eed
 51 
 52 #define SPINLOCK_OWNER_INIT     ((void *)-1L)
 53 
 54 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 55 # define SPIN_DEP_MAP_INIT(lockname)    .dep_map = { .name = #lockname }
 56 #else
 57 # define SPIN_DEP_MAP_INIT(lockname)
 58 #endif
 59 
 60 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 61 # define RW_DEP_MAP_INIT(lockname)      .dep_map = { .name = #lockname }
 62 #else
 63 # define RW_DEP_MAP_INIT(lockname)
 64 #endif
 65 
 66 #ifdef CONFIG_DEBUG_SPINLOCK
 67 # define __SPIN_LOCK_UNLOCKED(lockname)                                 \
 68         (spinlock_t)    {       .raw_lock = __RAW_SPIN_LOCK_UNLOCKED,   \
 69                                 .magic = SPINLOCK_MAGIC,                \
 70                                 .owner = SPINLOCK_OWNER_INIT,           \
 71                                 .owner_cpu = -1,                        \
 72                                 SPIN_DEP_MAP_INIT(lockname) }
 73 #define __RW_LOCK_UNLOCKED(lockname)                                    \
 74         (rwlock_t)      {       .raw_lock = __RAW_RW_LOCK_UNLOCKED,     \
 75                                 .magic = RWLOCK_MAGIC,                  \
 76                                 .owner = SPINLOCK_OWNER_INIT,           \
 77                                 .owner_cpu = -1,                        \
 78                                 RW_DEP_MAP_INIT(lockname) }
 79 #else
 80 # define __SPIN_LOCK_UNLOCKED(lockname) \
 81         (spinlock_t)    {       .raw_lock = __RAW_SPIN_LOCK_UNLOCKED,   \
 82                                 SPIN_DEP_MAP_INIT(lockname) }
 83 #define __RW_LOCK_UNLOCKED(lockname) \
 84         (rwlock_t)      {       .raw_lock = __RAW_RW_LOCK_UNLOCKED,     \
 85                                 RW_DEP_MAP_INIT(lockname) }
 86 #endif
 87 
 88 /*
 89  * SPIN_LOCK_UNLOCKED and RW_LOCK_UNLOCKED defeat lockdep state tracking and
 90  * are hence deprecated.
 91  * Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or
 92  * __SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate.
 93  */
 94 #define SPIN_LOCK_UNLOCKED      __SPIN_LOCK_UNLOCKED(old_style_spin_init)
 95 #define RW_LOCK_UNLOCKED        __RW_LOCK_UNLOCKED(old_style_rw_init)
 96 
 97 #define DEFINE_SPINLOCK(x)      spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
 98 #define DEFINE_RWLOCK(x)        rwlock_t x = __RW_LOCK_UNLOCKED(x)
 99 
100 #endif /* __LINUX_SPINLOCK_TYPES_H */
101 
  This page was automatically generated by the LXR engine.