xref: /openbmc/linux/tools/perf/util/mutex.h (revision e57d897703c3bf8b66680c69c0e75fbd9d9617f1)
1*e57d8977SPavithra Gurushankar /* SPDX-License-Identifier: GPL-2.0 */
2*e57d8977SPavithra Gurushankar #ifndef __PERF_MUTEX_H
3*e57d8977SPavithra Gurushankar #define __PERF_MUTEX_H
4*e57d8977SPavithra Gurushankar 
5*e57d8977SPavithra Gurushankar #include <pthread.h>
6*e57d8977SPavithra Gurushankar #include <stdbool.h>
7*e57d8977SPavithra Gurushankar 
8*e57d8977SPavithra Gurushankar /*
9*e57d8977SPavithra Gurushankar  * A wrapper around the mutex implementation that allows perf to error check
10*e57d8977SPavithra Gurushankar  * usage, etc.
11*e57d8977SPavithra Gurushankar  */
12*e57d8977SPavithra Gurushankar struct mutex {
13*e57d8977SPavithra Gurushankar 	pthread_mutex_t lock;
14*e57d8977SPavithra Gurushankar };
15*e57d8977SPavithra Gurushankar 
16*e57d8977SPavithra Gurushankar /* A wrapper around the condition variable implementation. */
17*e57d8977SPavithra Gurushankar struct cond {
18*e57d8977SPavithra Gurushankar 	pthread_cond_t cond;
19*e57d8977SPavithra Gurushankar };
20*e57d8977SPavithra Gurushankar 
21*e57d8977SPavithra Gurushankar /* Default initialize the mtx struct. */
22*e57d8977SPavithra Gurushankar void mutex_init(struct mutex *mtx);
23*e57d8977SPavithra Gurushankar /*
24*e57d8977SPavithra Gurushankar  * Initialize the mtx struct and set the process-shared rather than default
25*e57d8977SPavithra Gurushankar  * process-private attribute.
26*e57d8977SPavithra Gurushankar  */
27*e57d8977SPavithra Gurushankar void mutex_init_pshared(struct mutex *mtx);
28*e57d8977SPavithra Gurushankar void mutex_destroy(struct mutex *mtx);
29*e57d8977SPavithra Gurushankar 
30*e57d8977SPavithra Gurushankar void mutex_lock(struct mutex *mtx);
31*e57d8977SPavithra Gurushankar void mutex_unlock(struct mutex *mtx);
32*e57d8977SPavithra Gurushankar /* Tries to acquire the lock and returns true on success. */
33*e57d8977SPavithra Gurushankar bool mutex_trylock(struct mutex *mtx);
34*e57d8977SPavithra Gurushankar 
35*e57d8977SPavithra Gurushankar /* Default initialize the cond struct. */
36*e57d8977SPavithra Gurushankar void cond_init(struct cond *cnd);
37*e57d8977SPavithra Gurushankar /*
38*e57d8977SPavithra Gurushankar  * Initialize the cond struct and specify the process-shared rather than default
39*e57d8977SPavithra Gurushankar  * process-private attribute.
40*e57d8977SPavithra Gurushankar  */
41*e57d8977SPavithra Gurushankar void cond_init_pshared(struct cond *cnd);
42*e57d8977SPavithra Gurushankar void cond_destroy(struct cond *cnd);
43*e57d8977SPavithra Gurushankar 
44*e57d8977SPavithra Gurushankar void cond_wait(struct cond *cnd, struct mutex *mtx);
45*e57d8977SPavithra Gurushankar void cond_signal(struct cond *cnd);
46*e57d8977SPavithra Gurushankar void cond_broadcast(struct cond *cnd);
47*e57d8977SPavithra Gurushankar 
48*e57d8977SPavithra Gurushankar #endif /* __PERF_MUTEX_H */
49