summaryrefslogtreecommitdiffstats
path: root/kernel/dma/mapping.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/dma/mapping.c')
-rw-r--r--kernel/dma/mapping.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index f7afdadb6770..1f628e7ac709 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -317,6 +317,12 @@ void arch_dma_set_mask(struct device *dev, u64 mask);
317 317
318int dma_set_mask(struct device *dev, u64 mask) 318int dma_set_mask(struct device *dev, u64 mask)
319{ 319{
320 /*
321 * Truncate the mask to the actually supported dma_addr_t width to
322 * avoid generating unsupportable addresses.
323 */
324 mask = (dma_addr_t)mask;
325
320 if (!dev->dma_mask || !dma_supported(dev, mask)) 326 if (!dev->dma_mask || !dma_supported(dev, mask))
321 return -EIO; 327 return -EIO;
322 328
@@ -330,6 +336,12 @@ EXPORT_SYMBOL(dma_set_mask);
330#ifndef CONFIG_ARCH_HAS_DMA_SET_COHERENT_MASK 336#ifndef CONFIG_ARCH_HAS_DMA_SET_COHERENT_MASK
331int dma_set_coherent_mask(struct device *dev, u64 mask) 337int dma_set_coherent_mask(struct device *dev, u64 mask)
332{ 338{
339 /*
340 * Truncate the mask to the actually supported dma_addr_t width to
341 * avoid generating unsupportable addresses.
342 */
343 mask = (dma_addr_t)mask;
344
333 if (!dma_supported(dev, mask)) 345 if (!dma_supported(dev, mask))
334 return -EIO; 346 return -EIO;
335 347