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