qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH V4 18/25] vhost: reset vhost devices upon cprsave


From: Michael S. Tsirkin
Subject: Re: [PATCH V4 18/25] vhost: reset vhost devices upon cprsave
Date: Tue, 13 Jul 2021 11:47:33 -0400

On Tue, Jul 06, 2021 at 09:45:49AM -0700, Steve Sistare wrote:
> A vhost device is implicitly preserved across re-exec because its fd is not
> closed, and the value of the fd is specified on the command line for the
> new qemu to find.  However, new qemu issues an VHOST_RESET_OWNER ioctl,
> which fails because the device already has an owner.  To fix, reset the
> owner prior to exec.
> 
> Signed-off-by: Mark Kanda <mark.kanda@oracle.com>
> Signed-off-by: Steve Sistare <steven.sistare@oracle.com>

Makes sense superficially.

Acked-by: Michael S. Tsirkin <mst@redhat.com>

I didn't really read the series deeply enough to just the rest of it.


> ---
>  hw/virtio/vhost.c         | 11 +++++++++++
>  include/hw/virtio/vhost.h |  1 +
>  migration/cpr.c           |  1 +
>  3 files changed, 13 insertions(+)
> 
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index e2163a0..8c0c9c3 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -1820,6 +1820,17 @@ void vhost_dev_stop(struct vhost_dev *hdev, 
> VirtIODevice *vdev)
>      hdev->vdev = NULL;
>  }
>  
> +void vhost_dev_reset_all(void)
> +{
> +    struct vhost_dev *dev;
> +
> +    QLIST_FOREACH(dev, &vhost_devices, entry) {
> +        if (dev->vhost_ops->vhost_reset_device(dev) < 0) {
> +            VHOST_OPS_DEBUG("vhost_reset_device failed");
> +        }
> +    }
> +}
> +
>  int vhost_net_set_backend(struct vhost_dev *hdev,
>                            struct vhost_vring_file *file)
>  {
> diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> index 4a8bc75..71704d4 100644
> --- a/include/hw/virtio/vhost.h
> +++ b/include/hw/virtio/vhost.h
> @@ -106,6 +106,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaque,
>  void vhost_dev_cleanup(struct vhost_dev *hdev);
>  int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev);
>  void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev);
> +void vhost_dev_reset_all(void);
>  int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
>  void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
>  
> diff --git a/migration/cpr.c b/migration/cpr.c
> index 578466c..6333988 100644
> --- a/migration/cpr.c
> +++ b/migration/cpr.c
> @@ -142,6 +142,7 @@ void cprexec(strList *args, Error **errp)
>          return;
>      }
>      walkenv(FD_PREFIX, preserve_fd, 0);
> +    vhost_dev_reset_all();
>      qemu_system_exec_request(args);
>  }
>  
> -- 
> 1.8.3.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]