Skip to content

Commit b340871

Browse files
rmurphy-armChristoph Hellwig
authored andcommitted
dma-direct: Make DIRECT_MAPPING_ERROR viable for SWIOTLB
With the overflow buffer removed, we no longer have a unique address which is guaranteed not to be a valid DMA target to use as an error token. The DIRECT_MAPPING_ERROR value of 0 tries to at least represent an unlikely DMA target, but unfortunately there are already SWIOTLB users with DMA-able memory at physical address 0 which now gets falsely treated as a mapping failure and leads to all manner of misbehaviour. The best we can do to mitigate that is flip DIRECT_MAPPING_ERROR to the other commonly-used error value of all-bits-set, since the last single byte of memory is by far the least-likely-valid DMA target. Fixes: dff8d6c ("swiotlb: remove the overflow buffer") Reported-by: John Stultz <john.stultz@linaro.org> Tested-by: John Stultz <john.stultz@linaro.org> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
1 parent c8ce94b commit b340871

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

include/linux/dma-direct.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include <linux/dma-mapping.h>
66
#include <linux/mem_encrypt.h>
77

8-
#define DIRECT_MAPPING_ERROR 0
8+
#define DIRECT_MAPPING_ERROR (~(dma_addr_t)0)
99

1010
#ifdef CONFIG_ARCH_HAS_PHYS_TO_DMA
1111
#include <asm/dma-direct.h>

0 commit comments

Comments
 (0)