Skip to content

Commit cb216b8

Browse files
rmurphy-armChristoph Hellwig
authored andcommitted
swiotlb: Skip cache maintenance on map error
If swiotlb_bounce_page() failed, calling arch_sync_dma_for_device() may lead to such delights as performing cache maintenance on whatever address phys_to_virt(SWIOTLB_MAP_ERROR) looks like, which is typically outside the kernel memory map and goes about as well as expected. Don't do that. Fixes: a4a4330 ("swiotlb: add support for non-coherent DMA") Tested-by: John Stultz <john.stultz@linaro.org> Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
1 parent b340871 commit cb216b8

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

kernel/dma/swiotlb.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,8 @@ dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
679679
}
680680

681681
if (!dev_is_dma_coherent(dev) &&
682-
(attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
682+
(attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0 &&
683+
dev_addr != DIRECT_MAPPING_ERROR)
683684
arch_sync_dma_for_device(dev, phys, size, dir);
684685

685686
return dev_addr;

0 commit comments

Comments
 (0)