[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH 01/12] vhost: Get vring base from vq, not svq
From: |
Jason Wang |
Subject: |
Re: [RFC PATCH 01/12] vhost: Get vring base from vq, not svq |
Date: |
Mon, 18 Jul 2022 13:48:03 +0800 |
On Sat, Jul 16, 2022 at 7:34 PM Eugenio Pérez <eperezma@redhat.com> wrote:
>
> The SVQ vring used idx usually match with the guest visible one, as long
> as all the guest buffers (GPA) maps to exactly one buffer within qemu's
> VA. However, as we can see in virtqueue_map_desc, a single guest buffer
> could map to many buffers in SVQ vring.
>
> The solution is to stop using the device's used idx and check for the
> last avail idx. Since we cannot report in-flight descriptors with vdpa,
> let's rewind all of them.
>
> Fixes: 6d0b22266633 ("vdpa: Adapt vhost_vdpa_get_vring_base to SVQ")
> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> ---
> hw/virtio/vhost-vdpa.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> index 795ed5a049..18820498b3 100644
> --- a/hw/virtio/vhost-vdpa.c
> +++ b/hw/virtio/vhost-vdpa.c
> @@ -1194,11 +1194,10 @@ static int vhost_vdpa_get_vring_base(struct vhost_dev
> *dev,
> struct vhost_vring_state *ring)
> {
> struct vhost_vdpa *v = dev->opaque;
> - int vdpa_idx = ring->index - dev->vq_index;
> int ret;
>
> if (v->shadow_vqs_enabled) {
> - VhostShadowVirtqueue *svq = g_ptr_array_index(v->shadow_vqs,
> vdpa_idx);
> + VirtQueue *vq = virtio_get_queue(dev->vdev, ring->index);
>
> /*
> * Setting base as last used idx, so destination will see as
> available
> @@ -1208,7 +1207,10 @@ static int vhost_vdpa_get_vring_base(struct vhost_dev
> *dev,
> * TODO: This is ok for networking, but other kinds of devices might
> * have problems with these retransmissions.
> */
> - ring->num = svq->last_used_idx;
> + while (virtqueue_rewind(vq, 1)) {
> + continue;
> + }
Will this leak mapped VirtQueueElement?
Thanks
> + ring->num = virtio_queue_get_last_avail_idx(dev->vdev, ring->index);
> return 0;
> }
>
> --
> 2.31.1
>
- [RFC PATCH 00/12] NIC vhost-vdpa state restore via Shadow CVQ, Eugenio Pérez, 2022/07/16
- [RFC PATCH 01/12] vhost: Get vring base from vq, not svq, Eugenio Pérez, 2022/07/16
- Re: [RFC PATCH 01/12] vhost: Get vring base from vq, not svq,
Jason Wang <=
- [RFC PATCH 02/12] vhost: Move SVQ queue rewind to the destination, Eugenio Pérez, 2022/07/16
- [RFC PATCH 03/12] vdpa: Small rename of error labels, Eugenio Pérez, 2022/07/16
- [RFC PATCH 04/12] vdpa: delay set_vring_ready after DRIVER_OK, Eugenio Pérez, 2022/07/16