This new optional callback is used to bind the device to a specific
address space so the vDPA framework can use VA when this callback
is implemented.
Suggested-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
include/linux/vdpa.h | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h
index 6d0f5e4e82c2..34388e21ef3f 100644
--- a/include/linux/vdpa.h
+++ b/include/linux/vdpa.h
@@ -282,6 +282,12 @@ struct vdpa_map_file {
* @iova: iova to be unmapped
* @size: size of the area
* Returns integer: success (0) or error (< 0)
+ * @bind_mm: Bind the device to a specific address space
+ * so the vDPA framework can use VA when this
+ * callback is implemented. (optional)
+ * @vdev: vdpa device
+ * @mm: address space to bind
+ * @owner: process that owns the address space
* @free: Free resources that belongs to vDPA (optional)
* @vdev: vdpa device
*/
@@ -341,6 +347,8 @@ struct vdpa_config_ops {
u64 iova, u64 size);
int (*set_group_asid)(struct vdpa_device *vdev, unsigned int group,
unsigned int asid);
+ int (*bind_mm)(struct vdpa_device *vdev, struct mm_struct *mm,
+ struct task_struct *owner);
/* Free device resources */
void (*free)(struct vdpa_device *vdev);
--
2.38.1
On Thu, Dec 15, 2022 at 12:30 AM Stefano Garzarella <sgarzare@redhat.com> wrote: > > This new optional callback is used to bind the device to a specific > address space so the vDPA framework can use VA when this callback > is implemented. > > Suggested-by: Jason Wang <jasowang@redhat.com> > Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> > --- > include/linux/vdpa.h | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h > index 6d0f5e4e82c2..34388e21ef3f 100644 > --- a/include/linux/vdpa.h > +++ b/include/linux/vdpa.h > @@ -282,6 +282,12 @@ struct vdpa_map_file { > * @iova: iova to be unmapped > * @size: size of the area > * Returns integer: success (0) or error (< 0) > + * @bind_mm: Bind the device to a specific address space > + * so the vDPA framework can use VA when this > + * callback is implemented. (optional) > + * @vdev: vdpa device > + * @mm: address space to bind Do we need an unbind or did a NULL mm mean unbind? > + * @owner: process that owns the address space Any reason we need the task_struct here? Thanks > * @free: Free resources that belongs to vDPA (optional) > * @vdev: vdpa device > */ > @@ -341,6 +347,8 @@ struct vdpa_config_ops { > u64 iova, u64 size); > int (*set_group_asid)(struct vdpa_device *vdev, unsigned int group, > unsigned int asid); > + int (*bind_mm)(struct vdpa_device *vdev, struct mm_struct *mm, > + struct task_struct *owner); > > /* Free device resources */ > void (*free)(struct vdpa_device *vdev); > -- > 2.38.1 >
On Fri, Dec 16, 2022 at 02:37:45PM +0800, Jason Wang wrote: >On Thu, Dec 15, 2022 at 12:30 AM Stefano Garzarella <sgarzare@redhat.com> wrote: >> >> This new optional callback is used to bind the device to a specific >> address space so the vDPA framework can use VA when this callback >> is implemented. >> >> Suggested-by: Jason Wang <jasowang@redhat.com> >> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> >> --- >> include/linux/vdpa.h | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h >> index 6d0f5e4e82c2..34388e21ef3f 100644 >> --- a/include/linux/vdpa.h >> +++ b/include/linux/vdpa.h >> @@ -282,6 +282,12 @@ struct vdpa_map_file { >> * @iova: iova to be unmapped >> * @size: size of the area >> * Returns integer: success (0) or error (< 0) >> + * @bind_mm: Bind the device to a specific address space >> + * so the vDPA framework can use VA when this >> + * callback is implemented. (optional) >> + * @vdev: vdpa device >> + * @mm: address space to bind > >Do we need an unbind or did a NULL mm mean unbind? Yep, your comment in patch 6 makes it necessary. I will add it! > >> + * @owner: process that owns the address space > >Any reason we need the task_struct here? Mainly to attach to kthread to the process cgroups, but that part is still in TODO since I need to understand it better. Maybe we can remove the task_struct here and use `current` directly in the callback. Thanks, Stefano
在 2022/12/16 16:17, Stefano Garzarella 写道: > On Fri, Dec 16, 2022 at 02:37:45PM +0800, Jason Wang wrote: >> On Thu, Dec 15, 2022 at 12:30 AM Stefano Garzarella >> <sgarzare@redhat.com> wrote: >>> >>> This new optional callback is used to bind the device to a specific >>> address space so the vDPA framework can use VA when this callback >>> is implemented. >>> >>> Suggested-by: Jason Wang <jasowang@redhat.com> >>> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> >>> --- >>> include/linux/vdpa.h | 8 ++++++++ >>> 1 file changed, 8 insertions(+) >>> >>> diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h >>> index 6d0f5e4e82c2..34388e21ef3f 100644 >>> --- a/include/linux/vdpa.h >>> +++ b/include/linux/vdpa.h >>> @@ -282,6 +282,12 @@ struct vdpa_map_file { >>> * @iova: iova to be unmapped >>> * @size: size of the area >>> * Returns integer: success (0) or >>> error (< 0) >>> + * @bind_mm: Bind the device to a specific >>> address space >>> + * so the vDPA framework can use VA >>> when this >>> + * callback is implemented. (optional) >>> + * @vdev: vdpa device >>> + * @mm: address space to bind >> >> Do we need an unbind or did a NULL mm mean unbind? > > Yep, your comment in patch 6 makes it necessary. I will add it! > >> >>> + * @owner: process that owns the >>> address space >> >> Any reason we need the task_struct here? > > Mainly to attach to kthread to the process cgroups, but that part is > still in TODO since I need to understand it better. Ok I see. > > Maybe we can remove the task_struct here and use `current` directly in > the callback. Yes, it's easier to start without cgroup and we can add it on top. Thanks > > Thanks, > Stefano >
© 2016 - 2025 Red Hat, Inc.