Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef __LINUX_RWLOCK_TYPES_H
  2. #define __LINUX_RWLOCK_TYPES_H
  3.  
  4. /*
  5.  * include/linux/rwlock_types.h - generic rwlock 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. typedef struct {
  12.         arch_rwlock_t raw_lock;
  13. #ifdef CONFIG_GENERIC_LOCKBREAK
  14.         unsigned int break_lock;
  15. #endif
  16. #ifdef CONFIG_DEBUG_SPINLOCK
  17.         unsigned int magic, owner_cpu;
  18.         void *owner;
  19. #endif
  20. #ifdef CONFIG_DEBUG_LOCK_ALLOC
  21.         struct lockdep_map dep_map;
  22. #endif
  23. } rwlock_t;
  24.  
  25. #define RWLOCK_MAGIC            0xdeaf1eed
  26.  
  27. #ifdef CONFIG_DEBUG_LOCK_ALLOC
  28. # define RW_DEP_MAP_INIT(lockname)      .dep_map = { .name = #lockname }
  29. #else
  30. # define RW_DEP_MAP_INIT(lockname)
  31. #endif
  32.  
  33. #ifdef CONFIG_DEBUG_SPINLOCK
  34. #define __RW_LOCK_UNLOCKED(lockname)                                    \
  35.         (rwlock_t)      {       .raw_lock = __ARCH_RW_LOCK_UNLOCKED,    \
  36.                                 .magic = RWLOCK_MAGIC,                  \
  37.                                 .owner = SPINLOCK_OWNER_INIT,           \
  38.                                 .owner_cpu = -1,                        \
  39.                                 RW_DEP_MAP_INIT(lockname) }
  40. #else
  41. #define __RW_LOCK_UNLOCKED(lockname) \
  42.         (rwlock_t)      {       .raw_lock = __ARCH_RW_LOCK_UNLOCKED,    \
  43.                                 RW_DEP_MAP_INIT(lockname) }
  44. #endif
  45.  
  46. #define DEFINE_RWLOCK(x)        rwlock_t x = __RW_LOCK_UNLOCKED(x)
  47.  
  48. #endif /* __LINUX_RWLOCK_TYPES_H */
  49.