aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm64/mm/dma-mapping.c9
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);