Merge "Revert "arm: dma: Allow CMA pages to not have a kernel mapping""

This commit is contained in:
qctecmdr 2020-05-27 08:45:22 -07:00 • committed by Gerrit - the friendly Code Review server
commit edebc0ccbb

View file

@ -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);
}