On Fri, Oct 14, 2022 at 7:15 PM <sebastien.boeuf@xxxxxxxxx> wrote: > > From: Sebastien Boeuf <sebastien.boeuf@xxxxxxxxx> > > This new ioctl adds support for resuming the device from userspace. > > This is required when trying to restore the device in a functioning > state after it's been suspended. It is already possible to reset a > suspended device, Nit: And should we allow resume a non suspended device? Do we need to document this requirement somewhere? > but that means the device must be reconfigured and > all the IOMMU/IOTLB mappings must be recreated. This new operation > allows the device to be resumed without going through a full reset. > > This is particularly useful when trying to perform offline migration of > a virtual machine (also known as snapshot/restore) as it allows the VMM > to resume the virtual machine back to a running state after the snapshot > is performed. > > Signed-off-by: Sebastien Boeuf <sebastien.boeuf@xxxxxxxxx> Acked-by: Jason Wang <jasowang@xxxxxxxxxx> > --- > drivers/vhost/vdpa.c | 18 ++++++++++++++++++ > include/uapi/linux/vhost.h | 8 ++++++++ > 2 files changed, 26 insertions(+) > > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c > index 833617d00ef6..1db7bd39fb63 100644 > --- a/drivers/vhost/vdpa.c > +++ b/drivers/vhost/vdpa.c > @@ -502,6 +502,21 @@ static long vhost_vdpa_suspend(struct vhost_vdpa *v) > return ops->suspend(vdpa); > } > > +/* After a successful return of this ioctl the device resumes processing > + * virtqueue descriptors. The device becomes fully operational the same way it > + * was before it was suspended. > + */ > +static long vhost_vdpa_resume(struct vhost_vdpa *v) > +{ > + struct vdpa_device *vdpa = v->vdpa; > + const struct vdpa_config_ops *ops = vdpa->config; > + > + if (!ops->resume) > + return -EOPNOTSUPP; > + > + return ops->resume(vdpa); > +} > + > static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd, > void __user *argp) > { > @@ -687,6 +702,9 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep, > case VHOST_VDPA_SUSPEND: > r = vhost_vdpa_suspend(v); > break; > + case VHOST_VDPA_RESUME: > + r = vhost_vdpa_resume(v); > + break; > default: > r = vhost_dev_ioctl(&v->vdev, cmd, argp); > if (r == -ENOIOCTLCMD) > diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h > index f9f115a7c75b..92e1b700b51c 100644 > --- a/include/uapi/linux/vhost.h > +++ b/include/uapi/linux/vhost.h > @@ -180,4 +180,12 @@ > */ > #define VHOST_VDPA_SUSPEND _IO(VHOST_VIRTIO, 0x7D) > > +/* Resume a device so it can resume processing virtqueue requests > + * > + * After the return of this ioctl the device will have restored all the > + * necessary states and it is fully operational to continue processing the > + * virtqueue descriptors. > + */ > +#define VHOST_VDPA_RESUME _IO(VHOST_VIRTIO, 0x7E) > + > #endif > -- > 2.34.1 > > --------------------------------------------------------------------- > Intel Corporation SAS (French simplified joint stock company) > Registered headquarters: "Les Montalets"- 2, rue de Paris, > 92196 Meudon Cedex, France > Registration Number: 302 456 199 R.C.S. NANTERRE > Capital: 5 208 026.16 Euros > > This e-mail and any attachments may contain confidential material for > the sole use of the intended recipient(s). Any review or distribution > by others is strictly prohibited. If you are not the intended > recipient, please contact the sender and delete all copies. > _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization