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@xxxxxxxxx> > Reviewed-by: Sean Hefty <sean.hefty@xxxxxxxxx> > Acked-by: Michael J. Ruhl <michael.j.ruhl@xxxxxxxxx> > Acked-by: Christian Koenig <christian.koenig@xxxxxxx> > Acked-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > 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