14ef0f4d6SPekka Enberg #ifndef KVM__MUTEX_H 24ef0f4d6SPekka Enberg #define KVM__MUTEX_H 34ef0f4d6SPekka Enberg 44ef0f4d6SPekka Enberg #include <pthread.h> 54ef0f4d6SPekka Enberg 64ef0f4d6SPekka Enberg #include "kvm/util.h" 74ef0f4d6SPekka Enberg 8b5b501ccSIngo Molnar /* 9b5b501ccSIngo Molnar * Kernel-alike mutex API - to make it easier for kernel developers 10b5b501ccSIngo Molnar * to write user-space code! :-) 11b5b501ccSIngo Molnar */ 12b5b501ccSIngo Molnar 13d3476f7dSSasha Levin struct mutex { 14d3476f7dSSasha Levin pthread_mutex_t mutex; 15d3476f7dSSasha Levin }; 16*15542babSAndre Przywara #define MUTEX_INITIALIZER { .mutex = PTHREAD_MUTEX_INITIALIZER } 17b5b501ccSIngo Molnar 18d3476f7dSSasha Levin #define DEFINE_MUTEX(mtx) struct mutex mtx = MUTEX_INITIALIZER 19d3476f7dSSasha Levin mutex_init(struct mutex * lock)20d3476f7dSSasha Levinstatic inline void mutex_init(struct mutex *lock) 21c0799eb9SPekka Enberg { 22d3476f7dSSasha Levin if (pthread_mutex_init(&lock->mutex, NULL) != 0) 23c0799eb9SPekka Enberg die("unexpected pthread_mutex_init() failure!"); 24c0799eb9SPekka Enberg } 25c0799eb9SPekka Enberg mutex_lock(struct mutex * lock)26d3476f7dSSasha Levinstatic inline void mutex_lock(struct mutex *lock) 274ef0f4d6SPekka Enberg { 28d3476f7dSSasha Levin if (pthread_mutex_lock(&lock->mutex) != 0) 294ef0f4d6SPekka Enberg die("unexpected pthread_mutex_lock() failure!"); 30d3476f7dSSasha Levin 314ef0f4d6SPekka Enberg } 324ef0f4d6SPekka Enberg mutex_unlock(struct mutex * lock)33d3476f7dSSasha Levinstatic inline void mutex_unlock(struct mutex *lock) 344ef0f4d6SPekka Enberg { 35d3476f7dSSasha Levin if (pthread_mutex_unlock(&lock->mutex) != 0) 364ef0f4d6SPekka Enberg die("unexpected pthread_mutex_unlock() failure!"); 374ef0f4d6SPekka Enberg } 384ef0f4d6SPekka Enberg 394ef0f4d6SPekka Enberg #endif /* KVM__MUTEX_H */ 40