VIRTIO_RING_F_EVENT_IDX is a bit position value, but virtio_init_device_vq populates vq->use_event_idx by ANDing this value directly to vdev->features. Fix the check for this flag in virtio_init_device_vq. --- virtio/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtio/core.c b/virtio/core.c index f432421..ea0e5b6 100644 --- a/virtio/core.c +++ b/virtio/core.c @@ -165,7 +165,7 @@ void virtio_init_device_vq(struct kvm *kvm, struct virtio_device *vdev, struct vring_addr *addr = &vq->vring_addr; vq->endian = vdev->endian; - vq->use_event_idx = (vdev->features & VIRTIO_RING_F_EVENT_IDX); + vq->use_event_idx = (vdev->features & (1UL << VIRTIO_RING_F_EVENT_IDX)); vq->enabled = true; if (addr->legacy) { -- 2.25.1