-----Original Message----- From: Jason Gunthorpe jgg@nvidia.com Sent: Friday, October 16, 2020 5:18 PM To: Xiong, Jianxin jianxin.xiong@intel.com Cc: linux-rdma@vger.kernel.org; dri-devel@lists.freedesktop.org; Doug Ledford dledford@redhat.com; Leon Romanovsky leon@kernel.org; Sumit Semwal sumit.semwal@linaro.org; Christian Koenig christian.koenig@amd.com; Vetter, Daniel daniel.vetter@intel.com Subject: Re: [PATCH v5 3/5] RDMA/uverbs: Add uverbs command for dma-buf based MR registration
On Thu, Oct 15, 2020 at 03:02:55PM -0700, Jianxin Xiong wrote:
Implement a new uverbs ioctl method for memory registration with file descriptor as an extra parameter.
Signed-off-by: Jianxin Xiong jianxin.xiong@intel.com Reviewed-by: Sean Hefty sean.hefty@intel.com Acked-by: Michael J. Ruhl michael.j.ruhl@intel.com Acked-by: Christian Koenig christian.koenig@amd.com Acked-by: Daniel Vetter daniel.vetter@ffwll.ch drivers/infiniband/core/uverbs_std_types_mr.c | 112 ++++++++++++++++++++++++++ include/uapi/rdma/ib_user_ioctl_cmds.h | 14 ++++ 2 files changed, 126 insertions(+)
diff --git a/drivers/infiniband/core/uverbs_std_types_mr.c b/drivers/infiniband/core/uverbs_std_types_mr.c index 9b22bb5..e54459f 100644 +++ b/drivers/infiniband/core/uverbs_std_types_mr.c @@ -1,5 +1,6 @@ /*
- Copyright (c) 2018, Mellanox Technologies inc. All rights reserved.
- Copyright (c) 2020, Intel Corporation. All rights reserved.
- This software is available to you under a choice of one of two
- licenses. You may choose to be licensed under the terms of the
GNU @@ -178,6 +179,85 @@ static int UVERBS_HANDLER(UVERBS_METHOD_QUERY_MR)( return IS_UVERBS_COPY_ERR(ret) ? ret : 0; }
+static int UVERBS_HANDLER(UVERBS_METHOD_REG_DMABUF_MR)(
- struct uverbs_attr_bundle *attrs)
+{
- struct ib_uobject *uobj =
uverbs_attr_get_uobject(attrs, UVERBS_ATTR_REG_DMABUF_MR_HANDLE);
- struct ib_pd *pd =
uverbs_attr_get_obj(attrs, UVERBS_ATTR_REG_DMABUF_MR_PD_HANDLE);
- struct ib_device *ib_dev = pd->device;
- u64 start, length, virt_addr;
- u32 fd, access_flags;
- struct ib_mr *mr;
- int ret;
- if (!ib_dev->ops.reg_user_mr_dmabuf)
return -EOPNOTSUPP;
- ret = uverbs_copy_from(&start, attrs,
UVERBS_ATTR_REG_DMABUF_MR_ADDR);
This should be called OFFSET uniformly here and in all the call chain below. Not start and not addr.
Right now it does mean the starting address, but that can be changed.
- if (ret)
return ret;
- ret = uverbs_copy_from(&length, attrs,
UVERBS_ATTR_REG_DMABUF_MR_LENGTH);
- if (ret)
return ret;
- ret = uverbs_copy_from(&virt_addr, attrs,
UVERBS_ATTR_REG_DMABUF_MR_HCA_VA);
I've been trying to call this IOVA
IOVA sounds good to me.
Jason