Subversion Repositories Kolibri OS

Rev

Rev 5272 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.