diff --git a/8250-serial.c b/8250-serial.c index 9394e88..6d4b216 100644 --- a/8250-serial.c +++ b/8250-serial.c @@ -2,6 +2,7 @@ #include "kvm/read-write.h" #include "kvm/ioport.h" +#include "kvm/mutex.h" #include "kvm/util.h" #include "kvm/term.h" #include "kvm/kvm.h" @@ -116,8 +117,7 @@ void serial8250__inject_interrupt(struct kvm *self) { struct serial8250_device *dev = &devices[0]; - if (pthread_mutex_lock(&dev->mutex) != 0) - die("pthread_mutex_lock"); + mutex_lock(&dev->mutex); serial8250__receive(self, dev); @@ -133,8 +133,7 @@ void serial8250__inject_interrupt(struct kvm *self) kvm__irq_line(self, dev->irq, 1); } - if (pthread_mutex_unlock(&dev->mutex) != 0) - die("pthread_mutex_unlock"); + mutex_unlock(&dev->mutex); } void serial8250__inject_sysrq(struct kvm *self) @@ -165,8 +164,7 @@ static bool serial8250_out(struct kvm *self, uint16_t port, void *data, int size if (!dev) return false; - if (pthread_mutex_lock(&dev->mutex) != 0) - die("pthread_mutex_lock"); + mutex_lock(&dev->mutex); offset = port - dev->iobase; @@ -239,8 +237,7 @@ static bool serial8250_out(struct kvm *self, uint16_t port, void *data, int size } out_unlock: - if (pthread_mutex_unlock(&dev->mutex) != 0) - die("pthread_mutex_unlock"); + mutex_unlock(&dev->mutex); return ret; } @@ -255,8 +252,7 @@ static bool serial8250_in(struct kvm *self, uint16_t port, void *data, int size, if (!dev) return false; - if (pthread_mutex_lock(&dev->mutex) != 0) - die("pthread_mutex_lock"); + mutex_lock(&dev->mutex); offset = port - dev->iobase; @@ -321,8 +317,7 @@ static bool serial8250_in(struct kvm *self, uint16_t port, void *data, int size, goto out_unlock; } out_unlock: - if (pthread_mutex_unlock(&dev->mutex) != 0) - die("pthread_mutex_unlock"); + mutex_unlock(&dev->mutex); return ret; } diff --git a/include/kvm/mutex.h b/include/kvm/mutex.h new file mode 100644 index 0000000..006ade3 --- /dev/null +++ b/include/kvm/mutex.h @@ -0,0 +1,20 @@ +#ifndef KVM__MUTEX_H +#define KVM__MUTEX_H + +#include + +#include "kvm/util.h" + +static inline void mutex_lock(pthread_mutex_t *mutex) +{ + if (pthread_mutex_lock(mutex) != 0) + die("unexpected pthread_mutex_lock() failure!"); +} + +static inline void mutex_unlock(pthread_mutex_t *mutex) +{ + if (pthread_mutex_unlock(mutex) != 0) + die("unexpected pthread_mutex_unlock() failure!"); +} + +#endif /* KVM__MUTEX_H */ diff --git a/virtio-blk.c b/virtio-blk.c index 5e7f57d..79f27c1 100644 --- a/virtio-blk.c +++ b/virtio-blk.c @@ -5,6 +5,7 @@ #include "kvm/disk-image.h" #include "kvm/virtio.h" #include "kvm/ioport.h" +#include "kvm/mutex.h" #include "kvm/util.h" #include "kvm/kvm.h" #include "kvm/pci.h" @@ -70,8 +71,7 @@ static bool virtio_blk_pci_io_in(struct kvm *self, uint16_t port, void *data, in unsigned long offset; bool ret = true; - if (pthread_mutex_lock(&blk_device.mutex) != 0) - die("pthread_mutex_lock"); + mutex_lock(&blk_device.mutex); offset = port - IOPORT_VIRTIO_BLK; @@ -108,8 +108,7 @@ static bool virtio_blk_pci_io_in(struct kvm *self, uint16_t port, void *data, in }; out_unlock: - if (pthread_mutex_unlock(&blk_device.mutex) != 0) - die("pthread_mutex_unlock"); + mutex_unlock(&blk_device.mutex); return ret; } @@ -180,8 +179,7 @@ static bool virtio_blk_pci_io_out(struct kvm *self, uint16_t port, void *data, i unsigned long offset; bool ret = true; - if (pthread_mutex_lock(&blk_device.mutex) != 0) - die("pthread_mutex_lock"); + mutex_lock(&blk_device.mutex); offset = port - IOPORT_VIRTIO_BLK; @@ -226,8 +224,7 @@ static bool virtio_blk_pci_io_out(struct kvm *self, uint16_t port, void *data, i }; out_unlock: - if (pthread_mutex_unlock(&blk_device.mutex) != 0) - die("pthread_mutex_unlock"); + mutex_unlock(&blk_device.mutex); return ret; }