On Thu, Feb 15, 2024 at 5:15 PM Eugenio Perez Martin <epere...@redhat.com> wrote: > > On Wed, Feb 14, 2024 at 1:39 PM Si-Wei Liu <si-wei....@oracle.com> wrote: > > > > Fix an issue where cancellation of ongoing migration ends up > > with no network connectivity. > > > > When canceling migration, SVQ will be switched back to the > > passthrough mode, but the right call fd is not programed to > > the device and the svq's own call fd is still used. At the > > point of this transitioning period, the shadow_vqs_enabled > > hadn't been set back to false yet, causing the installation > > of call fd inadvertently bypassed. > > > > Fixes: a8ac88585da1 ("vhost: Add Shadow VirtQueue call forwarding > > capabilities") > > Cc: Eugenio Pérez <epere...@redhat.com> > > Acked-by: Jason Wang <jasow...@redhat.com> > > Signed-off-by: Si-Wei Liu <si-wei....@oracle.com> > > --- > > hw/virtio/vhost-vdpa.c | 10 +++++++++- > > 1 file changed, 9 insertions(+), 1 deletion(-) > > > > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c > > index 004110f..dfeca8b 100644 > > --- a/hw/virtio/vhost-vdpa.c > > +++ b/hw/virtio/vhost-vdpa.c > > @@ -1468,7 +1468,15 @@ static int vhost_vdpa_set_vring_call(struct > > vhost_dev *dev, > > > > /* Remember last call fd because we can switch to SVQ anytime. */ > > vhost_svq_set_svq_call_fd(svq, file->fd); > > - if (v->shadow_vqs_enabled) { > > + /* > > + * When SVQ is transitioning to off, shadow_vqs_enabled has > > + * not been set back to false yet, but the underlying call fd > > + * will have to switch back to the guest notifier to signal the > > + * passthrough virtqueues. In other situations, SVQ's own call > > + * fd shall be used to signal the device model. > > + */ > > + if (v->shadow_vqs_enabled && > > + v->shared->svq_switching != SVQ_TSTATE_DISABLING) { > > I think it would be great to not need to add more status variables to > vhost_vdpa (or any struct). > > What if we recover the call file descriptor at vhost_vdpa_svqs_stop? > This way everything is more symmetrical as kick and call are set by > vhost_vdpa_svqs_start. >
Also, we could check for dev->started. > Thanks! > > > return 0; > > } > > > > -- > > 1.8.3.1 > >