On Tue, May 21, 2019 at 3:44 AM Hesham Almatary <hesham.almat...@cl.cam.ac.uk> wrote: > > The current implementation unnecessarily checks for PMP even if MMU > translation > failed. This may trigger a wrong PMP access exception instead of > a page exception. > > For example, the very first instruction fetched after the first satp write in > S-Mode will trigger a PMP access fault instead of an instruction fetch page > fault. > > This patch prioritises MMU exceptions over PMP exceptions and only checks for > PMP if MMU translation succeeds.
It's probably worth noting in the commit message that this commit is only required for the future commits. Otherwise it is a little confusing. Alistair > > Signed-off-by: Hesham Almatary <hesham.almat...@cl.cam.ac.uk> > --- > target/riscv/cpu_helper.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c > index 41d6db41c3..40fb47e794 100644 > --- a/target/riscv/cpu_helper.c > +++ b/target/riscv/cpu_helper.c > @@ -401,6 +401,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int > size, > " prot %d\n", __func__, address, ret, pa, prot); > > if (riscv_feature(env, RISCV_FEATURE_PMP) && > + (ret == TRANSLATE_SUCCESS) && > !pmp_hart_has_privs(env, pa, TARGET_PAGE_SIZE, 1 << access_type)) { > ret = TRANSLATE_FAIL; > } > -- > 2.17.1 > >