diff options
author | 2018-08-24 08:07:52 +0200 | |
---|---|---|
committer | 2018-09-01 15:42:28 +0200 | |
commit | c1d0af1a1d5dfde880f588eceb4c00710e0f60ff (patch) | |
tree | f4204c8cb840ebc8c6771f1cbba6247b43c76b48 /kernel/dma | |
parent | Linux 4.19-rc1 (diff) | |
download | linux-c1d0af1a1d5dfde880f588eceb4c00710e0f60ff.tar.gz linux-c1d0af1a1d5dfde880f588eceb4c00710e0f60ff.tar.bz2 linux-c1d0af1a1d5dfde880f588eceb4c00710e0f60ff.zip |
kernel/dma/direct: take DMA offset into account in dma_direct_supported
When a device has a DMA offset the dma capable result will change due
to the difference between the physical and DMA address. Take that into
account.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Diffstat (limited to 'kernel/dma')
-rw-r--r-- | kernel/dma/direct.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index 1c35b7b945d0..de87b0282e74 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c @@ -168,7 +168,7 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents, int dma_direct_supported(struct device *dev, u64 mask) { #ifdef CONFIG_ZONE_DMA - if (mask < DMA_BIT_MASK(ARCH_ZONE_DMA_BITS)) + if (mask < phys_to_dma(dev, DMA_BIT_MASK(ARCH_ZONE_DMA_BITS))) return 0; #else /* @@ -177,7 +177,7 @@ int dma_direct_supported(struct device *dev, u64 mask) * memory, or by providing a ZONE_DMA32. If neither is the case, the * architecture needs to use an IOMMU instead of the direct mapping. */ - if (mask < DMA_BIT_MASK(32)) + if (mask < phys_to_dma(dev, DMA_BIT_MASK(32))) return 0; #endif /* |