Am 10.04.25 um 16:53 schrieb Bastien Curutchet:
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.
Well that basically disqualifies this patch set in the first paragraph.
To justify some kernel change we always need an in kernel user of the interface, since this is purely for out-of-tree drivers this is a no-go to begin with.
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.
Leaking DMA addresses to userspace is usually seen as quite some security hole, but on the other hand with UIO you don't have much other choice.
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.
Yeah, that won't fly at all.
What you could potentially do is to create an UIO driver which imports DMA-bufs, pins them and then provide the DMA addresses to userspace.
But please be aware that DMA-fences are fundamentally incompatible with UIO. So you won't be able to do any form of synchronization which probably makes the implementation pretty limited.
Regards, Christian.
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,
linaro-mm-sig@lists.linaro.org