Messages in this thread | | | Date | Fri, 18 Sep 2020 15:43:39 +0800 | From | "刘邵华BTD" <> | Subject | 回复:[PATCH] riscv: fix pfn to virt err in do page fault(). |
| |
Hi Christoph, > On Thu, Sep 17, 2020 at 03:25:49PM +0800, liush wrote: > > The argument to pfn_to_virt() should be pfn not the value of CSR_SATP. > > > > Signed-off-by: liush <liush@allwinnertech.com> > > --- > > arch/riscv/mm/fault.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c > > index 716d64e..9b4e088 100644 > > --- a/arch/riscv/mm/fault.c > > +++ b/arch/riscv/mm/fault.c > > @@ -212,7 +212,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs) > > * of a task switch. > > */ > > index = pgd_index(addr); > > - pgd = (pgd_t *)pfn_to_virt(csr_read(CSR_SATP)) + index; > > + pgd = (pgd_t *)pfn_to_virt(csr_read(CSR_SATP) & SATP_PPN) + index;
> This adds a crazy long line. One nice way to clean this up would be to > add a local pfn variable, as it would also make the code more readable.
Thanks, i'll modify it in next revision | |