#ifndef KVM__RWSEM_H #define KVM__RWSEM_H #include #include "kvm/util.h" /* * Kernel-alike rwsem API - to make it easier for kernel developers * to write user-space code! :-) */ #define DECLARE_RWSEM(sem) pthread_rwlock_t sem = PTHREAD_RWLOCK_INITIALIZER static inline void down_read(pthread_rwlock_t *rwsem) { if (pthread_rwlock_rdlock(rwsem) != 0) die("unexpected pthread_rwlock_rdlock() failure!"); } static inline void down_write(pthread_rwlock_t *rwsem) { if (pthread_rwlock_wrlock(rwsem) != 0) die("unexpected pthread_rwlock_wrlock() failure!"); } static inline void up_read(pthread_rwlock_t *rwsem) { if (pthread_rwlock_unlock(rwsem) != 0) die("unexpected pthread_rwlock_unlock() failure!"); } static inline void up_write(pthread_rwlock_t *rwsem) { if (pthread_rwlock_unlock(rwsem) != 0) die("unexpected pthread_rwlock_unlock() failure!"); } #endif /* KVM__RWSEM_H */