The current vaddr_to_paddr_riscv64() incorrectly uses VTOP() linear mapping for vmalloc and vmemmap addresses, which are not linearly mapped. Add checks to exclude these regions so they fall through to page table walk via vtop_riscv64().
Co-developed-by: Rui Qi <[email protected]> Signed-off-by: Shuan He <[email protected]> --- arch/riscv64.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/riscv64.c b/arch/riscv64.c index 1b43ec4f62a1..28365fa0cc5b 100644 --- a/arch/riscv64.c +++ b/arch/riscv64.c @@ -202,6 +202,8 @@ vaddr_to_paddr_riscv64(unsigned long vaddr) unsigned long long swapper_phys; if (vaddr >= PAGE_OFFSET && + !(vaddr >= NUMBER(vmalloc_start) && vaddr <= NUMBER(vmalloc_end)) && + !(vaddr >= NUMBER(vmemmap_start) && vaddr <= NUMBER(vmemmap_end)) && !(vaddr >= NUMBER(modules_vaddr) && vaddr <= NUMBER(modules_end))){ return VTOP(vaddr); } -- 2.20.1
