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: