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 13b5b501ccSIngo Molnar #define DEFINE_MUTEX(mutex) pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER 14b5b501ccSIngo Molnar 15*c0799eb9SPekka Enberg static inline void mutex_init(pthread_mutex_t *mutex) 16*c0799eb9SPekka Enberg { 17*c0799eb9SPekka Enberg if (pthread_mutex_init(mutex, NULL) != 0) 18*c0799eb9SPekka Enberg die("unexpected pthread_mutex_init() failure!"); 19*c0799eb9SPekka Enberg } 20*c0799eb9SPekka Enberg 214ef0f4d6SPekka Enberg static inline void mutex_lock(pthread_mutex_t *mutex) 224ef0f4d6SPekka Enberg { 234ef0f4d6SPekka Enberg if (pthread_mutex_lock(mutex) != 0) 244ef0f4d6SPekka Enberg die("unexpected pthread_mutex_lock() failure!"); 254ef0f4d6SPekka Enberg } 264ef0f4d6SPekka Enberg 274ef0f4d6SPekka Enberg static inline void mutex_unlock(pthread_mutex_t *mutex) 284ef0f4d6SPekka Enberg { 294ef0f4d6SPekka Enberg if (pthread_mutex_unlock(mutex) != 0) 304ef0f4d6SPekka Enberg die("unexpected pthread_mutex_unlock() failure!"); 314ef0f4d6SPekka Enberg } 324ef0f4d6SPekka Enberg 334ef0f4d6SPekka Enberg #endif /* KVM__MUTEX_H */ 34