[PATCH 0/3] uio/dma-buf: Give UIO users access to DMA addresses.

Bastien Curutchet
2025-04-10T14:53:22Z

Hi all,

Many UIO users performing DMA from their UIO device need to access the
DMA addresses of the allocated buffers. There are out-of-tree drivers
that allow to do it but nothing in the mainline.

I know DMA shouldn't be handled by userspace but, IMHO, since UIO
drivers exist, it would be better if they offered a way of doing this.

This patch series use the dma-heap framework which already allows
userspace to allocate DMA buffers. I tried to avoid 'polluting' the
existing heaps to prevent inappropriate uses of this new feature by
introducing a new UIO heap, which is the only one implementing this
behavior.

PATCH 1 allows the creation of heaps that don't implement map/unmap_buf
operations as UIO heap doesn't use them.
PATCH 2 adds the DMA_BUF_IOCTL_GET_DMA_ADDR which transmits the DMA
addresses to userspace.
PATCH 3 implements the UIO heap.

It has been tested with the uio_pci_generic driver on a PowerPC.

Signed-off-by: Bastien Curutchet <bastien.curutchet@bootlin.com>
---
Bastien Curutchet (3):
dma-buf: Allow heap that doesn't provide map_buf/unmap_buf
dma-buf: Add DMA_BUF_IOCTL_GET_DMA_ADDR
uio: Add UIO_DMABUF_HEAP

drivers/dma-buf/dma-buf.c | 29 +++++++++--
drivers/uio/Kconfig | 9 ++++
drivers/uio/Makefile | 1 +
drivers/uio/uio.c | 4 ++
drivers/uio/uio_heap.c | 120 +++++++++++++++++++++++++++++++++++++++++++
include/linux/dma-buf.h | 1 +
include/linux/uio_driver.h | 2 +
include/uapi/linux/dma-buf.h | 1 +
8 files changed, 164 insertions(+), 3 deletions(-)
---
base-commit: 5f13fa25acaa4f586aaed12efcf7436e004eeaf2
change-id: 20250408-uio-dma-9b011e9e7f0b

Best regards,
--
Bastien Curutchet <bastien.curutchet@bootlin.com>