diff options
author | Christoph Hellwig <hch@lst.de> | 2019-02-13 08:01:21 +0100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2019-02-18 12:41:03 +0100 |
commit | 9b18114c0be0193ebe772e45b3731602f056d54e (patch) | |
tree | 9bde6e9eed69e9a34714af83075687f9944f2c0c | |
parent | powerpc/dma: remove max_direct_dma_addr (diff) | |
download | linux-9b18114c0be0193ebe772e45b3731602f056d54e.tar.xz linux-9b18114c0be0193ebe772e45b3731602f056d54e.zip |
powerpc/dma: fix an off-by-one in dma_capable
We need to compare the last byte in the dma range and not the one after it
for the bus_dma_mask, just like we do for the regular dma_mask. Fix this
cleanly by merging the two comparisms into one.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Christian Zigotzky <chzigotzky@xenosoft.de>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r-- | arch/powerpc/include/asm/dma-direct.h | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/arch/powerpc/include/asm/dma-direct.h b/arch/powerpc/include/asm/dma-direct.h index e00ab5d0612d..92d8aed86422 100644 --- a/arch/powerpc/include/asm/dma-direct.h +++ b/arch/powerpc/include/asm/dma-direct.h @@ -4,15 +4,11 @@ static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size) { -#ifdef CONFIG_SWIOTLB - if (dev->bus_dma_mask && addr + size > dev->bus_dma_mask) - return false; -#endif - if (!dev->dma_mask) return false; - return addr + size - 1 <= *dev->dma_mask; + return addr + size - 1 <= + min_not_zero(*dev->dma_mask, dev->bus_dma_mask); } static inline dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) |