diff options
Diffstat (limited to 'kernel/dma/mapping.c')
-rw-r--r-- | kernel/dma/mapping.c | 12 |
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 | ||
318 | int dma_set_mask(struct device *dev, u64 mask) | 318 | int 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 |
331 | int dma_set_coherent_mask(struct device *dev, u64 mask) | 337 | int 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 | ||