diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c index bc2c6235e6..856c6d6678 100644 --- a/drivers/bus/vmbus/linux/vmbus_uio.c +++ b/drivers/bus/vmbus/linux/vmbus_uio.c @@ -39,11 +39,17 @@ void vmbus_uio_irq_control(struct rte_vmbus_device *dev, int32_t onoff) int vmbus_uio_irq_read(struct rte_vmbus_device *dev) { int32_t count; + int cc; - if (read(dev->intr_handle.fd, &count, sizeof(count)) < 0) { - VMBUS_LOG(ERR, "cannot read to %d:%s", - dev->intr_handle.fd, strerror(errno)); - count = -errno; + cc = read(dev->intr_handle.fd, &count, sizeof(count)); + if (cc < (int)sizeof(count)) { + if (cc < 0) { + VMBUS_LOG(ERR, "IRQ read failed %s", + strerror(errno)); + return -errno; + } + VMBUS_LOG(ERR, "can't read IRQ count"); + return -EINVAL; } return count;