diff options
| -rw-r--r-- | arch/arm64/mm/dma-mapping.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 49e217ac7e1e..61e93f0b5482 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c | |||
| @@ -583,13 +583,14 @@ static void *__iommu_alloc_attrs(struct device *dev, size_t size, | |||
| 583 | size >> PAGE_SHIFT); | 583 | size >> PAGE_SHIFT); |
| 584 | return NULL; | 584 | return NULL; |
| 585 | } | 585 | } |
| 586 | if (!coherent) | ||
| 587 | __dma_flush_area(page_to_virt(page), iosize); | ||
| 588 | |||
| 589 | addr = dma_common_contiguous_remap(page, size, VM_USERMAP, | 586 | addr = dma_common_contiguous_remap(page, size, VM_USERMAP, |
| 590 | prot, | 587 | prot, |
| 591 | __builtin_return_address(0)); | 588 | __builtin_return_address(0)); |
| 592 | if (!addr) { | 589 | if (addr) { |
| 590 | memset(addr, 0, size); | ||
| 591 | if (!coherent) | ||
| 592 | __dma_flush_area(page_to_virt(page), iosize); | ||
| 593 | } else { | ||
| 593 | iommu_dma_unmap_page(dev, *handle, iosize, 0, attrs); | 594 | iommu_dma_unmap_page(dev, *handle, iosize, 0, attrs); |
| 594 | dma_release_from_contiguous(dev, page, | 595 | dma_release_from_contiguous(dev, page, |
| 595 | size >> PAGE_SHIFT); | 596 | size >> PAGE_SHIFT); |
