vdpa_sim: fix vringh initialization in vdpasim_queue_ready()
authorStefano Garzarella <sgarzare@redhat.com>
Thu, 10 Nov 2022 14:13:35 +0000 (15:13 +0100)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 28 Dec 2022 10:28:10 +0000 (05:28 -0500)
When we initialize vringh, we should pass the features and the
number of elements in the virtqueue negotiated with the driver,
otherwise operations with vringh may fail.

This was discovered in a case where the driver sets a number of
elements in the virtqueue different from the value returned by
.get_vq_num_max().

In vdpasim_vq_reset() is safe to initialize the vringh with
default values, since the virtqueue will not be used until
vdpasim_queue_ready() is called again.

Fixes: 2c53d0f64c06 ("vdpasim: vDPA device simulator")
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Message-Id: <20221110141335.62171-1-sgarzare@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Eugenio PĂ©rez <eperezma@redhat.com>
drivers/vdpa/vdpa_sim/vdpa_sim.c

index b071f0d842fbade2db1ab9a2d10dc9dd03cb80ee..b20689f8fe89cbe1b4d245ae3a0f82e2297a5029 100644 (file)
@@ -67,8 +67,7 @@ static void vdpasim_queue_ready(struct vdpasim *vdpasim, unsigned int idx)
 {
        struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
 
-       vringh_init_iotlb(&vq->vring, vdpasim->dev_attr.supported_features,
-                         VDPASIM_QUEUE_MAX, false,
+       vringh_init_iotlb(&vq->vring, vdpasim->features, vq->num, false,
                          (struct vring_desc *)(uintptr_t)vq->desc_addr,
                          (struct vring_avail *)
                          (uintptr_t)vq->driver_addr,