Skip to content

Commit 7cdfecb

Browse files
committed
RDMA/mlx5: Add support for dmabuf to devx umem
Bugzilla: https://bugzilla.redhat.com/2123401 commit 9af859c Author: Jason Gunthorpe <jgg@ziepe.ca> Date: Thu Sep 1 11:20:55 2022 -0300 RDMA/mlx5: Add support for dmabuf to devx umem This is modeled after the similar EFA enablement in commit 66f4817 ("RDMA/efa: Add support for dmabuf memory regions"). Like EFA there is no support for revocation so we simply call the ib_umem_dmabuf_get_pinned() to obtain a umem instead of the normal ib_umem_get(). Everything else stays the same. Link: https://lore.kernel.org/r/3-v1-bd147097458e+ede-umem_dmabuf_jgg@nvidia.com Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Kamal Heib <kheib@redhat.com>
1 parent 351de7c commit 7cdfecb

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

drivers/infiniband/hw/mlx5/devx.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2181,9 +2181,25 @@ static int devx_umem_get(struct mlx5_ib_dev *dev, struct ib_ucontext *ucontext,
21812181
if (err)
21822182
return err;
21832183

2184-
obj->umem = ib_umem_get(&dev->ib_dev, addr, size, access);
2185-
if (IS_ERR(obj->umem))
2186-
return PTR_ERR(obj->umem);
2184+
if (uverbs_attr_is_valid(attrs, MLX5_IB_ATTR_DEVX_UMEM_REG_DMABUF_FD)) {
2185+
struct ib_umem_dmabuf *umem_dmabuf;
2186+
int dmabuf_fd;
2187+
2188+
err = uverbs_get_raw_fd(&dmabuf_fd, attrs,
2189+
MLX5_IB_ATTR_DEVX_UMEM_REG_DMABUF_FD);
2190+
if (err)
2191+
return -EFAULT;
2192+
2193+
umem_dmabuf = ib_umem_dmabuf_get_pinned(
2194+
&dev->ib_dev, addr, size, dmabuf_fd, access);
2195+
if (IS_ERR(umem_dmabuf))
2196+
return PTR_ERR(umem_dmabuf);
2197+
obj->umem = &umem_dmabuf->umem;
2198+
} else {
2199+
obj->umem = ib_umem_get(&dev->ib_dev, addr, size, access);
2200+
if (IS_ERR(obj->umem))
2201+
return PTR_ERR(obj->umem);
2202+
}
21872203
return 0;
21882204
}
21892205

@@ -2833,6 +2849,8 @@ DECLARE_UVERBS_NAMED_METHOD(
28332849
UVERBS_ATTR_PTR_IN(MLX5_IB_ATTR_DEVX_UMEM_REG_LEN,
28342850
UVERBS_ATTR_TYPE(u64),
28352851
UA_MANDATORY),
2852+
UVERBS_ATTR_RAW_FD(MLX5_IB_ATTR_DEVX_UMEM_REG_DMABUF_FD,
2853+
UA_OPTIONAL),
28362854
UVERBS_ATTR_FLAGS_IN(MLX5_IB_ATTR_DEVX_UMEM_REG_ACCESS,
28372855
enum ib_access_flags),
28382856
UVERBS_ATTR_CONST_IN(MLX5_IB_ATTR_DEVX_UMEM_REG_PGSZ_BITMAP,

include/uapi/rdma/mlx5_user_ioctl_cmds.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ enum mlx5_ib_devx_umem_reg_attrs {
174174
MLX5_IB_ATTR_DEVX_UMEM_REG_ACCESS,
175175
MLX5_IB_ATTR_DEVX_UMEM_REG_OUT_ID,
176176
MLX5_IB_ATTR_DEVX_UMEM_REG_PGSZ_BITMAP,
177+
MLX5_IB_ATTR_DEVX_UMEM_REG_DMABUF_FD,
177178
};
178179

179180
enum mlx5_ib_devx_umem_dereg_attrs {

0 commit comments

Comments
 (0)