On Fri, Jul 31, 2026 at 06:46:22PM +0200, Laurent Vivier wrote: > vu_cleanup() resets most virtqueue state (started, notification, > file descriptors) but does not reset the enable flag. After a > QEMU disconnect and reconnect, the stale enable flag causes > vu_set_vring_enable_exec() to hit its early return check > (vq->enable == enable), skipping the threading_start_thread() call > and leaving the worker thread stopped. > > Reset vq->enable to false in vu_cleanup() alongside the other > virtqueue state. > > Signed-off-by: Laurent Vivier Reviewed-by: David Gibson AFAICT it would make sense to apply this fix immediately, independent of the rest of the series. > --- > vhost_user.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/vhost_user.c b/vhost_user.c > index 9e382c21f963..8ba3949e4e9d 100644 > --- a/vhost_user.c > +++ b/vhost_user.c > @@ -1083,6 +1083,7 @@ void vu_cleanup(struct vu_dev *vdev) > struct vu_virtq *vq = &vdev->vq[i]; > > vq->started = false; > + vq->enable = false; > vq->notification = true; > > if (vq->call_fd != -1) { > -- > 2.54.0 > -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson