[PATCH v5 3/5] RDMA/uverbs: Add uverbs command for dma-buf based MR registration

Xiong, Jianxin jianxin.xiong at intel.com
Sat Oct 17 00:59:59 UTC 2020


> -----Original Message-----
> From: Jason Gunthorpe <jgg at nvidia.com>
> Sent: Friday, October 16, 2020 5:18 PM
> To: Xiong, Jianxin <jianxin.xiong at intel.com>
> Cc: linux-rdma at vger.kernel.org; dri-devel at lists.freedesktop.org; Doug Ledford <dledford at redhat.com>; Leon Romanovsky
> <leon at kernel.org>; Sumit Semwal <sumit.semwal at linaro.org>; Christian Koenig <christian.koenig at amd.com>; Vetter, Daniel
> <daniel.vetter at 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 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.

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


More information about the dri-devel mailing list