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