Subversion Repositories Kolibri OS

Rev

Rev 5272 | 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 raw_spinlock {
  21.         arch_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. } raw_spinlock_t;
  33.  
  34. #define SPINLOCK_MAGIC          0xdead4ead
  35.  
  36. #define SPINLOCK_OWNER_INIT     ((void *)-1L)
  37.  
  38. #ifdef CONFIG_DEBUG_LOCK_ALLOC
  39. # define SPIN_DEP_MAP_INIT(lockname)    .dep_map = { .name = #lockname }
  40. #else
  41. # define SPIN_DEP_MAP_INIT(lockname)
  42. #endif
  43.  
  44. #ifdef CONFIG_DEBUG_SPINLOCK
  45. # define SPIN_DEBUG_INIT(lockname)              \
  46.         .magic = SPINLOCK_MAGIC,                \
  47.         .owner_cpu = -1,                        \
  48.         .owner = SPINLOCK_OWNER_INIT,
  49. #else
  50. # define SPIN_DEBUG_INIT(lockname)
  51. #endif
  52.  
  53. #define __RAW_SPIN_LOCK_INITIALIZER(lockname)   \
  54.         {                                       \
  55.         .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,  \
  56.         SPIN_DEBUG_INIT(lockname)               \
  57.         SPIN_DEP_MAP_INIT(lockname) }
  58.  
  59. #define __RAW_SPIN_LOCK_UNLOCKED(lockname)      \
  60.         (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
  61.  
  62. #define DEFINE_RAW_SPINLOCK(x)  raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
  63.  
  64. typedef struct spinlock {
  65.         union {
  66.                 struct raw_spinlock rlock;
  67.  
  68. #ifdef CONFIG_DEBUG_LOCK_ALLOC
  69. # define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
  70.                 struct {
  71.                         u8 __padding[LOCK_PADSIZE];
  72.                         struct lockdep_map dep_map;
  73.                 };
  74. #endif
  75.         };
  76. } spinlock_t;
  77.  
  78. #define __SPIN_LOCK_INITIALIZER(lockname) \
  79.         { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
  80.  
  81. #define __SPIN_LOCK_UNLOCKED(lockname) \
  82.         (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
  83.  
  84. #define DEFINE_SPINLOCK(x)      spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
  85.  
  86. #include <linux/rwlock_types.h>
  87.  
  88. #endif /* __LINUX_SPINLOCK_TYPES_H */
  89.