Loading arch/arm/mm/dma-mapping.c +13 −21 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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) { Loading @@ -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; } Loading @@ -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 (want_vaddr) { if (PageHighMem(page)) dma_common_free_remap(cpu_addr, size); else __dma_remap(page, size, PAGE_KERNEL, true); __dma_remap(page, size, PAGE_KERNEL); } dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT); } Loading Loading
arch/arm/mm/dma-mapping.c +13 −21 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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) { Loading @@ -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; } Loading @@ -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 (want_vaddr) { if (PageHighMem(page)) dma_common_free_remap(cpu_addr, size); else __dma_remap(page, size, PAGE_KERNEL, true); __dma_remap(page, size, PAGE_KERNEL); } dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT); } Loading