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 13*d3476f7dSSasha Levin struct mutex { 14*d3476f7dSSasha Levin pthread_mutex_t mutex; 15*d3476f7dSSasha Levin }; 16*d3476f7dSSasha Levin #define MUTEX_INITIALIZER (struct mutex) { .mutex = PTHREAD_MUTEX_INITIALIZER } 17b5b501ccSIngo Molnar 18*d3476f7dSSasha Levin #define DEFINE_MUTEX(mtx) struct mutex mtx = MUTEX_INITIALIZER 19*d3476f7dSSasha Levin 20*d3476f7dSSasha Levin static inline void mutex_init(struct mutex *lock) 21c0799eb9SPekka Enberg { 22*d3476f7dSSasha Levin if (pthread_mutex_init(&lock->mutex, NULL) != 0) 23c0799eb9SPekka Enberg die("unexpected pthread_mutex_init() failure!"); 24c0799eb9SPekka Enberg } 25c0799eb9SPekka Enberg 26*d3476f7dSSasha Levin static inline void mutex_lock(struct mutex *lock) 274ef0f4d6SPekka Enberg { 28*d3476f7dSSasha Levin if (pthread_mutex_lock(&lock->mutex) != 0) 294ef0f4d6SPekka Enberg die("unexpected pthread_mutex_lock() failure!"); 30*d3476f7dSSasha Levin 314ef0f4d6SPekka Enberg } 324ef0f4d6SPekka Enberg 33*d3476f7dSSasha Levin static inline void mutex_unlock(struct mutex *lock) 344ef0f4d6SPekka Enberg { 35*d3476f7dSSasha 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