From: Marek Szyprowski Date: Wed, 25 Mar 2026 17:24:26 +0000 (+0100) Subject: Merge tag 'dma-mapping-7.0-2026-03-25' into dma-mapping-for-next X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=15d6dd1ed3d58656bd7b86e9303ad839d6913b2e;p=thirdparty%2Fkernel%2Flinux.git Merge tag 'dma-mapping-7.0-2026-03-25' into dma-mapping-for-next dma-mapping fixes for Linux 7.0 A set of fixes for DMA-mapping subsystem, which resolve false-positive warnings from KMSAN and DMA-API debug (Shigeru Yoshida and Leon Romanovsky) as well as a simple build fix (Miguel Ojeda). Signed-off-by: Marek Szyprowski --- 15d6dd1ed3d58656bd7b86e9303ad839d6913b2e diff --cc drivers/iommu/dma-iommu.c index 66fc25bae85b0,94d5141696424..68b44d9320d3c --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@@ -1227,13 -1219,12 +1227,14 @@@ dma_addr_t iommu_dma_map_phys(struct de return DMA_MAPPING_ERROR; } - if (!coherent && !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) + if (!coherent && !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) { arch_sync_dma_for_device(phys, size, dir); + arch_sync_dma_flush(); + } iova = __iommu_dma_map(dev, phys, size, prot, dma_mask); - if (iova == DMA_MAPPING_ERROR && !(attrs & DMA_ATTR_MMIO)) + if (iova == DMA_MAPPING_ERROR && + !(attrs & (DMA_ATTR_MMIO | DMA_ATTR_REQUIRE_COHERENT))) swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs); return iova; } diff --cc kernel/dma/mapping.c index 78d8b4039c3e6,6d3dd0bd3a886..df3eccc7d4cac --- a/kernel/dma/mapping.c +++ b/kernel/dma/mapping.c @@@ -164,9 -164,12 +164,12 @@@ dma_addr_t dma_map_phys(struct device * if (WARN_ON_ONCE(!dev->dma_mask)) return DMA_MAPPING_ERROR; + if (!dev_is_dma_coherent(dev) && (attrs & DMA_ATTR_REQUIRE_COHERENT)) + return DMA_MAPPING_ERROR; + if (dma_map_direct(dev, ops) || (!is_mmio && arch_dma_map_phys_direct(dev, phys + size))) - addr = dma_direct_map_phys(dev, phys, size, dir, attrs); + addr = dma_direct_map_phys(dev, phys, size, dir, attrs, true); else if (use_dma_iommu(dev)) addr = iommu_dma_map_phys(dev, phys, size, dir, attrs); else if (ops->map_phys)