From 7f0009819712bf6868b4d5b8ff2ff140b34299d6 Mon Sep 17 00:00:00 2001 From: Shixiang Zheng Date: Mon, 26 Aug 2019 08:55:39 +0800 Subject: [PATCH] video/rockchip: rga2: fix rga_dma_flush_page crash issue Unable to handle kernel paging request at virtual address ffffffc000000000 PC is at __dma_flush_range+0x18/0x30 LR is at rga_dma_flush_page+0x40/0x48 Change-Id: I6c15bc60edac042884ad14611485f0380e3bd355 Signed-off-by: Shixiang Zheng Signed-off-by: Li Huang --- drivers/video/rockchip/rga2/rga2_mmu_info.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/video/rockchip/rga2/rga2_mmu_info.c b/drivers/video/rockchip/rga2/rga2_mmu_info.c index f082ec56c307..84916c7b9bf0 100644 --- a/drivers/video/rockchip/rga2/rga2_mmu_info.c +++ b/drivers/video/rockchip/rga2/rga2_mmu_info.c @@ -489,7 +489,7 @@ static int rga2_MapUserMemory(struct page **pages, uint32_t *pageTable, pte = pte_offset_map_lock(current->mm, pmd, (Memory + i) << PAGE_SHIFT, &ptl); - if (!pte) { + if (pte_none(*pte)) { pr_err("RGA2 failed to get pte\n"); pte_unmap_unlock(pte, ptl); status = RGA2_OUT_OF_RESOURCES; @@ -498,9 +498,9 @@ static int rga2_MapUserMemory(struct page **pages, uint32_t *pageTable, pfn = pte_pfn(*pte); Address = ((pfn << PAGE_SHIFT) | (((unsigned long)((Memory + i) << PAGE_SHIFT)) & ~PAGE_MASK)); - pte_unmap_unlock(pte, ptl); pageTable[i] = (uint32_t)Address; rga2_dma_flush_page(pfn_to_page(pfn)); + pte_unmap_unlock(pte, ptl); } up_read(¤t->mm->mmap_sem); return status;