qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH v9 01/23] vhost: Return earlier if used buffers overrun


From: Jason Wang
Subject: Re: [RFC PATCH v9 01/23] vhost: Return earlier if used buffers overrun
Date: Fri, 8 Jul 2022 16:52:10 +0800

On Thu, Jul 7, 2022 at 2:40 AM Eugenio Pérez <eperezma@redhat.com> wrote:
>
> Previous function misses the just picked avail buffer from the queue.
> This way keeps blocking the used queue forever, but is cleaner to check
> before calling to vhost_svq_get_buf.
>
> Fixes: 100890f7cad50 ("vhost: Shadow virtqueue buffers forwarding")
> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>

Acked-by: Jason Wang <jasowang@redhat.com>

> ---
>  hw/virtio/vhost-shadow-virtqueue.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/hw/virtio/vhost-shadow-virtqueue.c 
> b/hw/virtio/vhost-shadow-virtqueue.c
> index 56c96ebd13..9280285435 100644
> --- a/hw/virtio/vhost-shadow-virtqueue.c
> +++ b/hw/virtio/vhost-shadow-virtqueue.c
> @@ -405,19 +405,21 @@ static void vhost_svq_flush(VhostShadowVirtqueue *svq,
>          vhost_svq_disable_notification(svq);
>          while (true) {
>              uint32_t len;
> -            g_autofree VirtQueueElement *elem = vhost_svq_get_buf(svq, &len);
> -            if (!elem) {
> -                break;
> -            }
> +            g_autofree VirtQueueElement *elem = NULL;
>
>              if (unlikely(i >= svq->vring.num)) {
>                  qemu_log_mask(LOG_GUEST_ERROR,
>                           "More than %u used buffers obtained in a %u size 
> SVQ",
>                           i, svq->vring.num);
> -                virtqueue_fill(vq, elem, len, i);
> -                virtqueue_flush(vq, i);
> +                virtqueue_flush(vq, svq->vring.num);
>                  return;
>              }
> +
> +            elem = vhost_svq_get_buf(svq, &len);
> +            if (!elem) {
> +                break;
> +            }
> +
>              virtqueue_fill(vq, elem, len, i++);
>          }
>
> --
> 2.31.1
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]