summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2020-08-25 18:42:54 +0200
committerPalmer Dabbelt <palmerdabbelt@google.com>2020-09-16 03:46:04 +0200
commit6747430197ed414be37e843064a7f365f4d1fd57 (patch)
treec375d5ab5f89bd62656e5467cde41e121c940bb4
parentriscv/mm/fault: Simplify mm_fault_error() (diff)
downloadlinux-6747430197ed414be37e843064a7f365f4d1fd57.tar.xz
linux-6747430197ed414be37e843064a7f365f4d1fd57.zip
riscv/mm/fault: Move FAULT_FLAG_WRITE handling in do_page_fault()
Let's handle the translation of EXC_STORE_PAGE_FAULT to FAULT_FLAG_WRITE once before looking up the VMA. This makes it easier to extract access error logic in the next patch. Signed-off-by: Pekka Enberg <penberg@kernel.org> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
-rw-r--r--arch/riscv/mm/fault.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c
index 3b430fb18de3..bdc70d3d507f 100644
--- a/arch/riscv/mm/fault.c
+++ b/arch/riscv/mm/fault.c
@@ -208,6 +208,9 @@ asmlinkage void do_page_fault(struct pt_regs *regs)
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);
+ if (cause == EXC_STORE_PAGE_FAULT)
+ flags |= FAULT_FLAG_WRITE;
+
retry:
mmap_read_lock(mm);
vma = find_vma(mm, addr);
@@ -251,7 +254,6 @@ good_area:
bad_area(regs, mm, code, addr);
return;
}
- flags |= FAULT_FLAG_WRITE;
break;
default:
panic("%s: unhandled cause %lu", __func__, cause);