From: Stefano Garzarella <sgarzare@redhat.com> To: virtualization@lists.linux-foundation.org Cc: Andrey Zhadchenko <andrey.zhadchenko@virtuozzo.com>, kvm@vger.kernel.org, "Michael S. Tsirkin" <mst@redhat.com>, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, eperezma@redhat.com, stefanha@redhat.com Subject: [PATCH v3 2/8] vhost-vdpa: use bind_mm/unbind_mm device callbacks Date: Tue, 21 Mar 2023 16:42:22 +0100 [thread overview] Message-ID: <20230321154228.182769-3-sgarzare@redhat.com> (raw) In-Reply-To: <20230321154228.182769-1-sgarzare@redhat.com> When the user call VHOST_SET_OWNER ioctl and the vDPA device has `use_va` set to true, let's call the bind_mm callback. In this way we can bind the device to the user address space and directly use the user VA. The unbind_mm callback is called during the release after stopping the device. Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> --- Notes: v3: - added `case VHOST_SET_OWNER` in vhost_vdpa_unlocked_ioctl() [Jason] v2: - call the new unbind_mm callback during the release [Jason] - avoid to call bind_mm callback after the reset, since the device is not detaching it now during the reset drivers/vhost/vdpa.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index 7be9d9d8f01c..20250c3418b2 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -219,6 +219,28 @@ static int vhost_vdpa_reset(struct vhost_vdpa *v) return vdpa_reset(vdpa); } +static long vhost_vdpa_bind_mm(struct vhost_vdpa *v) +{ + struct vdpa_device *vdpa = v->vdpa; + const struct vdpa_config_ops *ops = vdpa->config; + + if (!vdpa->use_va || !ops->bind_mm) + return 0; + + return ops->bind_mm(vdpa, v->vdev.mm); +} + +static void vhost_vdpa_unbind_mm(struct vhost_vdpa *v) +{ + struct vdpa_device *vdpa = v->vdpa; + const struct vdpa_config_ops *ops = vdpa->config; + + if (!vdpa->use_va || !ops->unbind_mm) + return; + + ops->unbind_mm(vdpa); +} + static long vhost_vdpa_get_device_id(struct vhost_vdpa *v, u8 __user *argp) { struct vdpa_device *vdpa = v->vdpa; @@ -709,6 +731,14 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep, case VHOST_VDPA_RESUME: r = vhost_vdpa_resume(v); break; + case VHOST_SET_OWNER: + r = vhost_dev_set_owner(d); + if (r) + break; + r = vhost_vdpa_bind_mm(v); + if (r) + vhost_dev_reset_owner(d, NULL); + break; default: r = vhost_dev_ioctl(&v->vdev, cmd, argp); if (r == -ENOIOCTLCMD) @@ -1287,6 +1317,7 @@ static int vhost_vdpa_release(struct inode *inode, struct file *filep) vhost_vdpa_clean_irq(v); vhost_vdpa_reset(v); vhost_dev_stop(&v->vdev); + vhost_vdpa_unbind_mm(v); vhost_vdpa_config_put(v); vhost_vdpa_cleanup(v); mutex_unlock(&d->mutex); -- 2.39.2 _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
WARNING: multiple messages have this Message-ID (diff)
From: Stefano Garzarella <sgarzare@redhat.com> To: virtualization@lists.linux-foundation.org Cc: stefanha@redhat.com, "Michael S. Tsirkin" <mst@redhat.com>, Andrey Zhadchenko <andrey.zhadchenko@virtuozzo.com>, eperezma@redhat.com, netdev@vger.kernel.org, Jason Wang <jasowang@redhat.com>, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Stefano Garzarella <sgarzare@redhat.com> Subject: [PATCH v3 2/8] vhost-vdpa: use bind_mm/unbind_mm device callbacks Date: Tue, 21 Mar 2023 16:42:22 +0100 [thread overview] Message-ID: <20230321154228.182769-3-sgarzare@redhat.com> (raw) In-Reply-To: <20230321154228.182769-1-sgarzare@redhat.com> When the user call VHOST_SET_OWNER ioctl and the vDPA device has `use_va` set to true, let's call the bind_mm callback. In this way we can bind the device to the user address space and directly use the user VA. The unbind_mm callback is called during the release after stopping the device. Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> --- Notes: v3: - added `case VHOST_SET_OWNER` in vhost_vdpa_unlocked_ioctl() [Jason] v2: - call the new unbind_mm callback during the release [Jason] - avoid to call bind_mm callback after the reset, since the device is not detaching it now during the reset drivers/vhost/vdpa.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index 7be9d9d8f01c..20250c3418b2 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -219,6 +219,28 @@ static int vhost_vdpa_reset(struct vhost_vdpa *v) return vdpa_reset(vdpa); } +static long vhost_vdpa_bind_mm(struct vhost_vdpa *v) +{ + struct vdpa_device *vdpa = v->vdpa; + const struct vdpa_config_ops *ops = vdpa->config; + + if (!vdpa->use_va || !ops->bind_mm) + return 0; + + return ops->bind_mm(vdpa, v->vdev.mm); +} + +static void vhost_vdpa_unbind_mm(struct vhost_vdpa *v) +{ + struct vdpa_device *vdpa = v->vdpa; + const struct vdpa_config_ops *ops = vdpa->config; + + if (!vdpa->use_va || !ops->unbind_mm) + return; + + ops->unbind_mm(vdpa); +} + static long vhost_vdpa_get_device_id(struct vhost_vdpa *v, u8 __user *argp) { struct vdpa_device *vdpa = v->vdpa; @@ -709,6 +731,14 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep, case VHOST_VDPA_RESUME: r = vhost_vdpa_resume(v); break; + case VHOST_SET_OWNER: + r = vhost_dev_set_owner(d); + if (r) + break; + r = vhost_vdpa_bind_mm(v); + if (r) + vhost_dev_reset_owner(d, NULL); + break; default: r = vhost_dev_ioctl(&v->vdev, cmd, argp); if (r == -ENOIOCTLCMD) @@ -1287,6 +1317,7 @@ static int vhost_vdpa_release(struct inode *inode, struct file *filep) vhost_vdpa_clean_irq(v); vhost_vdpa_reset(v); vhost_dev_stop(&v->vdev); + vhost_vdpa_unbind_mm(v); vhost_vdpa_config_put(v); vhost_vdpa_cleanup(v); mutex_unlock(&d->mutex); -- 2.39.2
next prev parent reply other threads:[~2023-03-21 15:42 UTC|newest] Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-03-21 15:42 [PATCH v3 0/8] vdpa_sim: add support for user VA Stefano Garzarella 2023-03-21 15:42 ` Stefano Garzarella 2023-03-21 15:42 ` [PATCH v3 1/8] vdpa: add bind_mm/unbind_mm callbacks Stefano Garzarella 2023-03-21 15:42 ` Stefano Garzarella 2023-03-23 2:58 ` Jason Wang 2023-03-23 2:58 ` Jason Wang 2023-03-21 15:42 ` Stefano Garzarella [this message] 2023-03-21 15:42 ` [PATCH v3 2/8] vhost-vdpa: use bind_mm/unbind_mm device callbacks Stefano Garzarella 2023-03-23 3:01 ` Jason Wang 2023-03-23 3:01 ` Jason Wang 2023-03-23 9:38 ` Stefano Garzarella 2023-03-23 9:38 ` Stefano Garzarella 2023-03-21 15:42 ` [PATCH v3 3/8] vringh: replace kmap_atomic() with kmap_local_page() Stefano Garzarella 2023-03-21 15:42 ` Stefano Garzarella 2023-03-22 10:37 ` Fabio M. De Francesco 2023-03-23 3:02 ` Jason Wang 2023-03-23 3:02 ` Jason Wang 2023-03-21 15:42 ` [PATCH v3 4/8] vringh: support VA with iotlb Stefano Garzarella 2023-03-21 15:42 ` Stefano Garzarella 2023-03-23 3:36 ` Jason Wang 2023-03-23 3:36 ` Jason Wang 2023-03-23 10:37 ` Stefano Garzarella 2023-03-23 10:37 ` Stefano Garzarella 2023-03-23 8:09 ` Eugenio Perez Martin 2023-03-23 10:46 ` Stefano Garzarella 2023-03-23 10:46 ` Stefano Garzarella 2023-03-23 14:43 ` Eugenio Perez Martin 2023-03-24 14:39 ` Stefano Garzarella 2023-03-24 14:39 ` Stefano Garzarella 2023-03-21 15:48 ` [PATCH v3 5/8] vdpa_sim: make devices agnostic for work management Stefano Garzarella 2023-03-21 15:48 ` Stefano Garzarella 2023-03-21 15:48 ` [PATCH v3 6/8] vdpa_sim: use kthread worker Stefano Garzarella 2023-03-21 15:48 ` Stefano Garzarella 2023-03-21 15:48 ` [PATCH v3 7/8] vdpa_sim: replace the spinlock with a mutex to protect the state Stefano Garzarella 2023-03-21 15:48 ` Stefano Garzarella 2023-03-21 15:48 ` [PATCH v3 8/8] vdpa_sim: add support for user VA Stefano Garzarella 2023-03-21 15:48 ` Stefano Garzarella 2023-03-23 3:42 ` Jason Wang 2023-03-23 3:42 ` Jason Wang 2023-03-23 9:50 ` Stefano Garzarella 2023-03-23 9:50 ` Stefano Garzarella 2023-03-23 11:44 ` Michael S. Tsirkin 2023-03-23 11:44 ` Michael S. Tsirkin 2023-03-24 2:54 ` Jason Wang 2023-03-24 2:54 ` Jason Wang 2023-03-24 14:43 ` Stefano Garzarella 2023-03-24 14:43 ` Stefano Garzarella 2023-03-27 3:12 ` Jason Wang 2023-03-27 3:12 ` Jason Wang 2023-03-24 3:49 ` Jason Wang 2023-03-24 3:49 ` Jason Wang 2023-03-24 14:46 ` Stefano Garzarella 2023-03-24 14:46 ` Stefano Garzarella
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230321154228.182769-3-sgarzare@redhat.com \ --to=sgarzare@redhat.com \ --cc=andrey.zhadchenko@virtuozzo.com \ --cc=eperezma@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mst@redhat.com \ --cc=netdev@vger.kernel.org \ --cc=stefanha@redhat.com \ --cc=virtualization@lists.linux-foundation.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.