All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Bin Guo <guobin@linux.alibaba.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [PATCH] hw/virtio: propagate vhost_virtqueue_mask() errors from start path
Date: Sat, 4 Jul 2026 05:10:20 -0400	[thread overview]
Message-ID: <20260704050823-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20260604124420.82450-1-guobin@linux.alibaba.com>

On Thu, Jun 04, 2026 at 08:44:20PM +0800, Bin Guo wrote:
> vhost_virtqueue_start() unmasks the call notifier by calling
> vhost_virtqueue_mask(), whose vhost_set_vring_call ioctl can fail
> (closed vhost-user socket, kernel ENOMEM, revoked guest_notifier fd)
> but whose void signature throws the error away. vhost_dev_start()
> then reports success while the backend has no valid call eventfd for
> that vq, leaving the guest with a working kick path but no virtqueue
> interrupts -- a half-up state harder to diagnose than a clean failure.
> 
> Make vhost_virtqueue_mask() return int and handle the error in the
> start path via the existing fail_vector unwind. Other callers reach
> the function through VirtioDeviceClass.guest_notifier_mask, whose
> void signature offers no upward error channel; they invoke it as a
> statement and remain source-compatible.
> 
> Resolves a long-standing TODO at the unmask call.
> 
> Signed-off-by: Bin Guo <guobin@linux.alibaba.com>
> ---
>  hw/virtio/vhost.c         | 12 +++++++++---
>  include/hw/virtio/vhost.h |  4 ++--
>  2 files changed, 11 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index b9dc4ed13b..42e2fc9952 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -1351,8 +1351,11 @@ int vhost_virtqueue_start(struct vhost_dev *dev,
>       * will do it later.
>       */
>      if (!vdev->use_guest_notifier_mask) {
> -        /* TODO: check and handle errors. */
> -        vhost_virtqueue_mask(dev, vdev, idx, false);
> +        r = vhost_virtqueue_mask(dev, vdev, idx, false);
> +        if (r < 0) {
> +            /* No call eventfd means no interrupts; bail out. */
> +            goto fail_vector;
> +        }
>      }
>  
>      if (k->query_guest_notifiers &&



Can you rebase please? Thanks!

> @@ -1815,7 +1818,7 @@ bool vhost_virtqueue_pending(struct vhost_dev *hdev, int n)
>  }
>  
>  /* Mask/unmask events from this vq. */
> -void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n,
> +int vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n,
>                           bool mask)
>  {
>      struct VirtQueue *vvq = virtio_get_queue(vdev, n);
> @@ -1836,7 +1839,10 @@ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n,
>      r = hdev->vhost_ops->vhost_set_vring_call(hdev, &file);
>      if (r < 0) {
>          error_report("vhost_set_vring_call failed %d", -r);
> +        return r;
>      }
> +
> +    return 0;
>  }
>  
>  bool vhost_config_pending(struct vhost_dev *hdev)
> diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> index 89817bd848..96cc261822 100644
> --- a/include/hw/virtio/vhost.h
> +++ b/include/hw/virtio/vhost.h
> @@ -317,8 +317,8 @@ bool vhost_virtqueue_pending(struct vhost_dev *hdev, int n);
>  
>  /* Mask/unmask events from this vq.
>   */
> -void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n,
> -                          bool mask);
> +int vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n,
> +                         bool mask);
>  
>  /**
>   * vhost_get_features_ex() - sanitize the extended features set
> -- 
> 2.50.1 (Apple Git-155)



      parent reply	other threads:[~2026-07-04  9:11 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-04 12:44 [PATCH] hw/virtio: propagate vhost_virtqueue_mask() errors from start path Bin Guo
2026-06-04 12:57 ` Philippe Mathieu-Daudé
2026-06-05  6:30   ` Bin Guo
2026-07-04  9:10 ` Michael S. Tsirkin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260704050823-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=guobin@linux.alibaba.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.