xref: /openbmc/linux/tools/perf/util/rwsem.c (revision b746a1a2860f4a918f32d10dc569115d282aaf2f)
1*fb71c86cSArnaldo Carvalho de Melo // SPDX-License-Identifier: GPL-2.0
20a7c74eaSArnaldo Carvalho de Melo #include "util.h"
30a7c74eaSArnaldo Carvalho de Melo #include "rwsem.h"
40a7c74eaSArnaldo Carvalho de Melo 
init_rwsem(struct rw_semaphore * sem)50a7c74eaSArnaldo Carvalho de Melo int init_rwsem(struct rw_semaphore *sem)
60a7c74eaSArnaldo Carvalho de Melo {
70a7c74eaSArnaldo Carvalho de Melo 	return pthread_rwlock_init(&sem->lock, NULL);
80a7c74eaSArnaldo Carvalho de Melo }
90a7c74eaSArnaldo Carvalho de Melo 
exit_rwsem(struct rw_semaphore * sem)100a7c74eaSArnaldo Carvalho de Melo int exit_rwsem(struct rw_semaphore *sem)
110a7c74eaSArnaldo Carvalho de Melo {
120a7c74eaSArnaldo Carvalho de Melo 	return pthread_rwlock_destroy(&sem->lock);
130a7c74eaSArnaldo Carvalho de Melo }
140a7c74eaSArnaldo Carvalho de Melo 
down_read(struct rw_semaphore * sem)150a7c74eaSArnaldo Carvalho de Melo int down_read(struct rw_semaphore *sem)
160a7c74eaSArnaldo Carvalho de Melo {
170a7c74eaSArnaldo Carvalho de Melo 	return perf_singlethreaded ? 0 : pthread_rwlock_rdlock(&sem->lock);
180a7c74eaSArnaldo Carvalho de Melo }
190a7c74eaSArnaldo Carvalho de Melo 
up_read(struct rw_semaphore * sem)200a7c74eaSArnaldo Carvalho de Melo int up_read(struct rw_semaphore *sem)
210a7c74eaSArnaldo Carvalho de Melo {
220a7c74eaSArnaldo Carvalho de Melo 	return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock);
230a7c74eaSArnaldo Carvalho de Melo }
240a7c74eaSArnaldo Carvalho de Melo 
down_write(struct rw_semaphore * sem)250a7c74eaSArnaldo Carvalho de Melo int down_write(struct rw_semaphore *sem)
260a7c74eaSArnaldo Carvalho de Melo {
270a7c74eaSArnaldo Carvalho de Melo 	return perf_singlethreaded ? 0 : pthread_rwlock_wrlock(&sem->lock);
280a7c74eaSArnaldo Carvalho de Melo }
290a7c74eaSArnaldo Carvalho de Melo 
up_write(struct rw_semaphore * sem)300a7c74eaSArnaldo Carvalho de Melo int up_write(struct rw_semaphore *sem)
310a7c74eaSArnaldo Carvalho de Melo {
320a7c74eaSArnaldo Carvalho de Melo 	return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock);
330a7c74eaSArnaldo Carvalho de Melo }
34