Stefano Garzarella
2023-Jan-13 10:13 UTC
[PATCH v6 3/4] vhost-vdpa: uAPI to resume the device
On Tue, Jan 03, 2023 at 11:51:07AM +0100, sebastien.boeuf at intel.com wrote:>From: Sebastien Boeuf <sebastien.boeuf at intel.com> > >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, 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. > >Acked-by: Jason Wang <jasowang at redhat.com> >Signed-off-by: Sebastien Boeuf <sebastien.boeuf at intel.com> >--- > 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.IIUC this is a no-op if the device wasn't suspended. If you have to resend, maybe add this info also here in the user documentation. Anyway, the patch LGTM: Reviewed-by: Stefano Garzarella <sgarzare at redhat.com>>+ */ >+#define VHOST_VDPA_RESUME _IO(VHOST_VIRTIO, 0x7E) >+ > #endif >-- >2.37.2 > >--------------------------------------------------------------------- >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. >