During bnx2i iSCSI testing we ran into page refcounting issues in the uio mmaps exported from cnic to the iscsiuio process, and bisected back to the removal of the __GFP_COMP flag from dma_alloc_coherent calls. The cnic uio interface also has issues running with an iommu enabled, which these changes correct. In order to fix these drivers to be able to mmap dma coherent memory via a uio device, introduce a new uio mmap type backed by dma_mmap_coherent. While I understand some complaints about how these drivers have been structured, I also don't like letting support bitrot when there's a reasonable alternative to re-architecting an existing driver. I believe this to be the most sane way to restore these drivers to functioning properly. There are two other uio drivers which are mmaping dma_alloc_coherent memory as UIO_MEM_PHYS, uio_dmem_genirq and uio_pruss. While a conversion to use dma_mmap_coherent might be more correct for these as well, I have no way of testing them and assume that this just hasn't been an issue for the platforms in question. v4: - re-introduce the dma_device member to uio_map, it needs to be passed to dma_mmap_coherent somehow - drop patch 3 to focus only on the uio interface, explicit page alignment isn't needed - re-add the v1 mail recipients, this isn't something to be handled through linux-scsi v3 (Nilesh Javali <njavali@xxxxxxxxxxx>): - fix warnings reported by kernel test robot and added base commit v2 (Nilesh Javali <njavali@xxxxxxxxxxx>): - expose only the dma_addr within uio and cnic. - Cleanup newly added unions comprising virtual_addr and struct device previous threads: v1: https://lore.kernel.org/all/20230929170023.1020032-1-cleech@xxxxxxxxxx/ attempt at an alternative change: https://lore.kernel.org/all/20231219055514.12324-1-njavali@xxxxxxxxxxx/ v2: https://lore.kernel.org/all/20240103091137.27142-1-njavali@xxxxxxxxxxx/ v3: https://lore.kernel.org/all/20240109121458.26475-1-njavali@xxxxxxxxxxx/ Chris Leech (2): uio: introduce UIO_MEM_DMA_COHERENT type cnic,bnx2,bnx2x: use UIO_MEM_DMA_COHERENT drivers/net/ethernet/broadcom/bnx2.c | 1 + .../net/ethernet/broadcom/bnx2x/bnx2x_main.c | 2 + drivers/net/ethernet/broadcom/cnic.c | 15 +++++-- drivers/net/ethernet/broadcom/cnic.h | 1 + drivers/net/ethernet/broadcom/cnic_if.h | 1 + drivers/uio/uio.c | 40 +++++++++++++++++++ include/linux/uio_driver.h | 3 ++ 7 files changed, 60 insertions(+), 3 deletions(-) base-commit: 861c0981648f5b64c86fd028ee622096eb7af05a -- 2.43.0