xref: /linux/tools/perf/util/rwsem.h (revision 0ea5c948cb64bab5bc7a5516774eb8536f05aa0d)
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