[PATCH v5 3/5] RDMA/uverbs: Add uverbs command for dma-buf based MR registration
Jason Gunthorpe
jgg at nvidia.com
Sat Oct 17 00:17:51 UTC 2020
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 at intel.com>
> Reviewed-by: Sean Hefty <sean.hefty at intel.com>
> Acked-by: Michael J. Ruhl <michael.j.ruhl at intel.com>
> Acked-by: Christian Koenig <christian.koenig at amd.com>
> Acked-by: Daniel Vetter <daniel.vetter at 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
More information about the dri-devel
mailing list