]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Merge tag 'dma-mapping-7.0-2026-03-25' into dma-mapping-for-next
authorMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 25 Mar 2026 17:24:26 +0000 (18:24 +0100)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 25 Mar 2026 17:25:43 +0000 (18:25 +0100)
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 <m.szyprowski@samsung.com>
1  2 
drivers/iommu/dma-iommu.c
include/linux/dma-mapping.h
kernel/dma/direct.h
kernel/dma/mapping.c
kernel/dma/swiotlb.c

index 66fc25bae85b0ad2a8c4d1cb8295e5e47fcc88a8,94d5141696424df226c461e2c05a5eae89e27c19..68b44d9320d3c31f43f0fa93ddb2c17d358a09a7
@@@ -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;
  }
Simple merge
Simple merge
index 78d8b4039c3e6aeb2f6025b6923ee1912a3f945d,6d3dd0bd3a88627f8b5925baa35b0845b5cb5a81..df3eccc7d4cac84f6a3795f28159106929722a8e
@@@ -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)
Simple merge