The -1 assumes that all devices with no cvq have an spare vq allocated for them, but with no offer of VIRTIO_NET_F_CTRL_VQ. This is an invalid device by the standard, so just stick to the right number of device models.
This is not a problem to vhost-net, but it is to vhost-vdpa, which device model trust to reach the last index to finish starting the device. Tested with vp_vdpa with host's vhost=on and vhost=off. v3: * Recover cvq devices. * Rename last_index to last_vq_index v2: * Delete all the conditional code instead of ROUND_DOWN in a deinitely too-bit-tricky way. Eugenio Pérez (2): vhost: Rename last_index to last_vq_index vhost: Fix last vq queue index of devices with no cvq include/hw/virtio/vhost.h | 2 +- hw/net/vhost_net.c | 8 ++++---- hw/virtio/vhost-vdpa.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) -- 2.27.0