From cce1d3c648ec091e6c7b38352082446500375e14 Mon Sep 17 00:00:00 2001 From: Qingqing Zhou Date: Wed, 27 May 2020 03:09:48 -0700 Subject: [PATCH] Revert "arm: dma: Allow CMA pages to not have a kernel mapping" This reverts commit 0b06cd5ca5801698b7fd9fa94d2b419d02dd126e. The meaning of DMA_ATTR_NO_KERNEL_MAPPING changes, it will not remove kernel mapping, just return the page pointer directly, so make 32 bit align with 64 bit. Change-Id: I905f2faa11681dff745191928345fef00c9ec796 Signed-off-by: Qingqing Zhou --- arch/arm/mm/dma-mapping.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 66a46e9d0126..5443a6c72a63 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -484,26 +484,12 @@ static int __dma_update_pte(pte_t *pte, unsigned long addr, void *data) return 0; } -static int __dma_clear_pte(pte_t *pte, unsigned long addr, void *data) -{ - pte_clear(&init_mm, addr, pte); - return 0; -} - -static void __dma_remap(struct page *page, size_t size, pgprot_t prot, - bool want_vaddr) +static void __dma_remap(struct page *page, size_t size, pgprot_t prot) { unsigned long start = (unsigned long) page_address(page); unsigned end = start + size; - int (*func)(pte_t *pte, unsigned long addr, void *data); - if (!want_vaddr) - func = __dma_clear_pte; - else - func = __dma_update_pte; - - apply_to_page_range(&init_mm, start, size, func, &prot); - mb(); /*Ensure pte's are updated */ + apply_to_page_range(&init_mm, start, size, __dma_update_pte, &prot); flush_tlb_kernel_range(start, end); } @@ -586,6 +572,9 @@ static void *__alloc_from_contiguous(struct device *dev, size_t size, __dma_clear_buffer(page, size, coherent_flag); + if (!want_vaddr) + goto out; + if (PageHighMem(page)) { ptr = dma_common_contiguous_remap(page, size, prot, caller); if (!ptr) { @@ -593,10 +582,11 @@ static void *__alloc_from_contiguous(struct device *dev, size_t size, return NULL; } } else { - __dma_remap(page, size, prot, want_vaddr); + __dma_remap(page, size, prot); ptr = page_address(page); } + out: *ret_page = page; return ptr; } @@ -604,10 +594,12 @@ static void *__alloc_from_contiguous(struct device *dev, size_t size, static void __free_from_contiguous(struct device *dev, struct page *page, void *cpu_addr, size_t size, bool want_vaddr) { - if (PageHighMem(page)) - dma_common_free_remap(cpu_addr, size); - else - __dma_remap(page, size, PAGE_KERNEL, true); + if (want_vaddr) { + if (PageHighMem(page)) + dma_common_free_remap(cpu_addr, size); + else + __dma_remap(page, size, PAGE_KERNEL); + } dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT); }