xref: /kvmtool/include/kvm/mutex.h (revision c0799eb9f2ed1c9c3bb67e2f970003fcba11b138)
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