Re: [PATCH v2] hw/virtio: propagate vhost_virtqueue_mask() errors from start path
Philippe Mathieu-Daudé <[email protected]> Mon, 3 Aug 2026 09:09:41 +0200
| Newsgroups | org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, On 16/7/26 05:33, 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 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 unchanged. > > Signed-off-by: Bin Guo <[email protected]> > --- > hw/virtio/vhost.c | 9 ++++++--- > include/hw/virtio/vhost.h | 2 +- > 2 files changed, 7 insertions(+), 4 deletions(-) > diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h > index 684bafcaad..1f62332d60 100644 > --- a/include/hw/virtio/vhost.h > +++ b/include/hw/virtio/vhost.h > @@ -312,7 +312,7 @@ bool vhost_virtqueue_pending(struct vhost_dev *hdev, int n); > > /* Mask/unmask events from this vq. Please document the new returned value, i.e.: " * Return 0 on success, negative errno on failure." (Good opportunity to convert to a proper docstring describing arguments) > */ > -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); > > /**