Hi,
> The function vhost.c:vhost_dev_stop fetches the vring base so the vq
> state can be migrated to other devices. However, this is unreliable in
> vdpa, since we didn't signal the device to suspend the queues, making
> the value fetched useless.
>
> Suspend the device if possible before fetching first and subsequent
> vring bases.
>
> Moreover, vdpa totally reset and wipes the device at the last device
> before fetch its vrings base, making that operation useless in the last
> device. This will be fixed in later patches of this series.
>
> Signed-off-by: Eugenio P?rez <eperezma at redhat.com>
> ---
> hw/virtio/vhost-vdpa.c | 19 +++++++++++++++++++
> hw/virtio/trace-events | 1 +
> 2 files changed, 20 insertions(+)
>
> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> index 1d0209d6ad..796f38d64e 100644
> --- a/hw/virtio/vhost-vdpa.c
> +++ b/hw/virtio/vhost-vdpa.c
> @@ -1109,6 +1109,24 @@ static void vhost_vdpa_svqs_stop(struct vhost_dev
*dev)
> }
> }
>
> +static void vhost_vdpa_suspend(struct vhost_dev *dev)
> +{
> + struct vhost_vdpa *v = dev->opaque;
> + int r;
> +
> + if (!vhost_vdpa_first_dev(dev) ||
> + !(dev->backend_features &
BIT_ULL(VHOST_BACKEND_F_SUSPEND))) {
Shouldn't it be backend_cap?