10a7c74eaSArnaldo Carvalho de Melo #ifndef _PERF_RWSEM_H 20a7c74eaSArnaldo Carvalho de Melo #define _PERF_RWSEM_H 30a7c74eaSArnaldo Carvalho de Melo 40a7c74eaSArnaldo Carvalho de Melo #include <pthread.h> 5*7a8f349eSIan Rogers #include "mutex.h" 6*7a8f349eSIan Rogers 7*7a8f349eSIan Rogers /* 8*7a8f349eSIan Rogers * Mutexes have additional error checking. Enable to use a mutex rather than a 9*7a8f349eSIan Rogers * rwlock for debugging. 10*7a8f349eSIan Rogers */ 11*7a8f349eSIan Rogers #define RWS_ERRORCHECK 0 120a7c74eaSArnaldo Carvalho de Melo 130a7c74eaSArnaldo Carvalho de Melo struct rw_semaphore { 14*7a8f349eSIan Rogers #if RWS_ERRORCHECK 15*7a8f349eSIan Rogers struct mutex mtx; 16*7a8f349eSIan Rogers #else 170a7c74eaSArnaldo Carvalho de Melo pthread_rwlock_t lock; 18*7a8f349eSIan Rogers #endif 190a7c74eaSArnaldo Carvalho de Melo }; 200a7c74eaSArnaldo Carvalho de Melo 210a7c74eaSArnaldo Carvalho de Melo int init_rwsem(struct rw_semaphore *sem); 220a7c74eaSArnaldo Carvalho de Melo int exit_rwsem(struct rw_semaphore *sem); 230a7c74eaSArnaldo Carvalho de Melo 240a7c74eaSArnaldo Carvalho de Melo int down_read(struct rw_semaphore *sem); 250a7c74eaSArnaldo Carvalho de Melo int up_read(struct rw_semaphore *sem); 260a7c74eaSArnaldo Carvalho de Melo 270a7c74eaSArnaldo Carvalho de Melo int down_write(struct rw_semaphore *sem); 280a7c74eaSArnaldo Carvalho de Melo int up_write(struct rw_semaphore *sem); 290a7c74eaSArnaldo Carvalho de Melo 300a7c74eaSArnaldo Carvalho de Melo #endif /* _PERF_RWSEM_H */ 31