linux/include/linux/rwlock_types.h
<<
>>
Prefs
   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 */
  11typedef 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