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.
- 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
Jason