107739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#ifndef FIO_MUTEX_H 207739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#define FIO_MUTEX_H 307739b57f09886b41323c605b0dbda7d2c12522bJens Axboe 407739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#include <pthread.h> 507739b57f09886b41323c605b0dbda7d2c12522bJens Axboe 68b4e954ca8cf671c25e6df1d675caa34b64f7678Jens Axboe#define FIO_MUTEX_MAGIC 0x4d555445U 78b4e954ca8cf671c25e6df1d675caa34b64f7678Jens Axboe#define FIO_RWLOCK_MAGIC 0x52574c4fU 88b4e954ca8cf671c25e6df1d675caa34b64f7678Jens Axboe 9cdd18ad87ed9a3639b76c41cfc9682ad7cce652eJens Axboestruct fio_mutex { 1007739b57f09886b41323c605b0dbda7d2c12522bJens Axboe pthread_mutex_t lock; 1107739b57f09886b41323c605b0dbda7d2c12522bJens Axboe pthread_cond_t cond; 1264d4d313ef4f537408d28fac863cf2a2b0f00175Jens Axboe int value; 134d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboe int waiters; 148b4e954ca8cf671c25e6df1d675caa34b64f7678Jens Axboe int magic; 1507739b57f09886b41323c605b0dbda7d2c12522bJens Axboe}; 1607739b57f09886b41323c605b0dbda7d2c12522bJens Axboe 17d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboestruct fio_rwlock { 18d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboe pthread_rwlock_t lock; 198b4e954ca8cf671c25e6df1d675caa34b64f7678Jens Axboe int magic; 20d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboe}; 21d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboe 22521da527743088a9bd2ab882f8b64799d49d5848Jens Axboeenum { 23521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe FIO_MUTEX_LOCKED = 0, 24521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe FIO_MUTEX_UNLOCKED = 1, 25521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe}; 26521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe 2772242057a25b59d01b3d4e1343c94cc7ac354950Jens Axboeextern int __fio_mutex_init(struct fio_mutex *, int); 28cdd18ad87ed9a3639b76c41cfc9682ad7cce652eJens Axboeextern struct fio_mutex *fio_mutex_init(int); 29c180342e1293259ca8d23ed0298aa6c32815fee5Jens Axboeextern void __fio_mutex_remove(struct fio_mutex *); 30cdd18ad87ed9a3639b76c41cfc9682ad7cce652eJens Axboeextern void fio_mutex_remove(struct fio_mutex *); 31d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboeextern void fio_mutex_up(struct fio_mutex *); 32af4bab56db4f87410c491c356954bbb65171f94dJens Axboeextern void fio_mutex_down(struct fio_mutex *); 3372242057a25b59d01b3d4e1343c94cc7ac354950Jens Axboeextern int fio_mutex_down_trylock(struct fio_mutex *); 34656b1393d43f9f22738404582ea14dec956aea83Jens Axboeextern int fio_mutex_down_timeout(struct fio_mutex *, unsigned int); 359c5b52907227f8f50dc472d11601869f75b8d663Jens Axboe 36d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboeextern void fio_rwlock_read(struct fio_rwlock *); 37d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboeextern void fio_rwlock_write(struct fio_rwlock *); 38d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboeextern void fio_rwlock_unlock(struct fio_rwlock *); 39d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboeextern struct fio_rwlock *fio_rwlock_init(void); 40d7df1d133b0c3daad4ae4c731e0dae7b0181fd62Jens Axboeextern void fio_rwlock_remove(struct fio_rwlock *); 414d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboe 4207739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#endif 43