File: /Users/paulross/dev/linux/linux-3.13/include/linux/percpu-rwsem.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _LINUX_PERCPU_RWSEM_H
       2: #define _LINUX_PERCPU_RWSEM_H
       3: 
       4: #include <linux/atomic.h>
       5: #include <linux/rwsem.h>
       6: #include <linux/percpu.h>
       7: #include <linux/wait.h>
       8: #include <linux/lockdep.h>
       9: 
      10: struct percpu_rw_semaphore {
      11:     unsigned int __percpu    *fast_read_ctr;
      12:     atomic_t        write_ctr;
      13:     struct rw_semaphore    rw_sem;
      14:     atomic_t        slow_read_ctr;
      15:     wait_queue_head_t    write_waitq;
      16: };
      17: 
      18: extern void percpu_down_read(struct percpu_rw_semaphore *);
      19: extern void percpu_up_read(struct percpu_rw_semaphore *);
      20: 
      21: extern void percpu_down_write(struct percpu_rw_semaphore *);
      22: extern void percpu_up_write(struct percpu_rw_semaphore *);
      23: 
      24: extern int __percpu_init_rwsem(struct percpu_rw_semaphore *,
      25:                 const char *, struct lock_class_key *);
      26: extern void percpu_free_rwsem(struct percpu_rw_semaphore *);
      27: 
      28: #define percpu_init_rwsem(brw)    \
      29: ({                                \
      30:     static struct lock_class_key rwsem_key;            \
      31:     __percpu_init_rwsem(brw, #brw, &rwsem_key);        \
      32: })
      33: 
      34: #endif
      35: