From: Gavin Li <g...@thegavinli.com> On x86, calling dma_mmap_coherent() on memory allocated with dma_alloc_coherent() causes the following warning to be issued:
x86/PAT: ... map pfn RAM range req uncached-minus for [mem 0x77f000000-0x77f210fff], got write-back This occurs because on x86 dma_alloc_coherent() returns normal kernel memory pages (with a write-back PAT), but dma_mmap_coherent() tries to map the same pages into userspace with a uncached-minus PAT, even though there is no need for the mapping to noncached. This patch ensures that on DMA coherent architectures/devices, memory is mapped normally rather than as noncached. Signed-off-by: Gavin Li <g...@thegavinli.com> --- include/linux/dma-noncoherent.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/linux/dma-noncoherent.h b/include/linux/dma-noncoherent.h index 9741767e400f..40ff11380ec7 100644 --- a/include/linux/dma-noncoherent.h +++ b/include/linux/dma-noncoherent.h @@ -31,7 +31,11 @@ long arch_dma_coherent_to_pfn(struct device *dev, void *cpu_addr, pgprot_t arch_dma_mmap_pgprot(struct device *dev, pgprot_t prot, unsigned long attrs); #else -# define arch_dma_mmap_pgprot(dev, prot, attrs) pgprot_noncached(prot) +static inline pgprot_t arch_dma_mmap_pgprot(struct device *dev, pgprot_t prot, + unsigned long attrs) +{ + return dev_is_dma_coherent(dev) ? prot : pgprot_noncached(prot); +} #endif #ifdef CONFIG_DMA_NONCOHERENT_CACHE_SYNC -- 2.22.0 _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu