]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
RDMA/uverbs: Add DMABUF object type and operations
authorYishai Hadas <yishaih@nvidia.com>
Sun, 1 Feb 2026 14:34:05 +0000 (16:34 +0200)
committerLeon Romanovsky <leon@kernel.org>
Mon, 9 Feb 2026 04:50:41 +0000 (23:50 -0500)
commit0ac6f4056c4a257f4b230b910e3e6fee6c6fc9b9
tree72c49a04acc7a3142449b520879ee13775d56a81
parent9ad95a0f2b75a788325249f341694e0343facf7b
RDMA/uverbs: Add DMABUF object type and operations

Expose DMABUF functionality to userspace through the uverbs interface,
enabling InfiniBand/RDMA devices to export PCI based memory regions
(e.g. device memory) as DMABUF file descriptors. This allows
zero-copy sharing of RDMA memory with other subsystems that support the
dma-buf framework.

A new UVERBS_OBJECT_DMABUF object type and allocation method were
introduced.

During allocation, uverbs invokes the driver to supply the
rdma_user_mmap_entry associated with the given page offset (pgoff).

Based on the returned rdma_user_mmap_entry, uverbs requests the driver
to provide the corresponding physical-memory details as well as the
driver’s PCI provider information.

Using this information, dma_buf_export() is called; if it succeeds,
uobj->object is set to the underlying file pointer returned by the
dma-buf framework.

The file descriptor number follows the standard uverbs allocation flow,
but the file pointer comes from the dma-buf subsystem, including its own
fops and private data.

When an mmap entry is removed, uverbs iterates over its associated
DMABUFs, marks them as revoked, and calls dma_buf_move_notify() so that
their importers are notified.

The same procedure applies during the disassociate flow; final cleanup
occurs when the application closes the file.

Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
Signed-off-by: Edward Srouji <edwards@nvidia.com>
Link: https://patch.msgid.link/20260201-dmabuf-export-v3-2-da238b614fe3@nvidia.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/Makefile
drivers/infiniband/core/device.c
drivers/infiniband/core/ib_core_uverbs.c
drivers/infiniband/core/rdma_core.c
drivers/infiniband/core/rdma_core.h
drivers/infiniband/core/uverbs.h
drivers/infiniband/core/uverbs_std_types_dmabuf.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_uapi.c
include/rdma/ib_verbs.h
include/rdma/uverbs_types.h
include/uapi/rdma/ib_user_ioctl_cmds.h