When 'virtio_is_Ready' returns 1, 'vdpa_dev->ops->dev_conf' will be called, and the vdpa driver called 'rte_vhost_get_vhost_vring' to get the vring addr info from 'vhost_devices->virtqueue[]'. virtio_is_ready's nr_vring is VIRTIO_BUILTIN_NUM_VQS_TO_BE_READY(2), multi-queue's nr_vring is greater than 2. Only 'vhost_devices->virtqueue[0]' and 'vhost_devices->virtqueue[1]' are obtained in the for loop. Other queues of multiple queues cannot obtain the corresponding 'vhost_devices->virtqueue[i]', which will cause 'vdpa_dev->ops->dev_conf' to obtain QEMU vring addr information from 'vhost_devices->virtqueue[i]' failed. Here, nr_ving is modified to dev->nr_vring, so that multiple queues can obtain the corresponding 'vhost_devices->virtqueue[i]'.
Signed-off-by: Hao Chen <ch...@yusur.tech> --- lib/vhost/vhost_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index 9902ae9944..9249eafc06 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -1473,7 +1473,7 @@ virtio_is_ready(struct virtio_net *dev) if (dev->nr_vring < nr_vring) return 0; - for (i = 0; i < nr_vring; i++) { + for (i = 0; i < dev->nr_vring; i++) { vq = dev->virtqueue[i]; if (!vq_is_ready(dev, vq)) -- 2.27.0