[RFC PATCH 13/18] target/riscv: Move PMP_AMATCH_OFF check in pmp_hart_has_privs
Richard Henderson <[email protected]>
| Newsgroups | org.nongnu.qemu-arm,org.nongnu.qemu-devel,org.nongnu.qemu-riscv |
|---|---|
| Message-ID | <[email protected]> |
Check for region disabled before checking the region range. Signed-off-by: Richard Henderson <[email protected]> --- target/riscv/tcg/pmp.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/target/riscv/tcg/pmp.c b/target/riscv/tcg/pmp.c index 41b55519a8..5bccc60527 100644 --- a/target/riscv/tcg/pmp.c +++ b/target/riscv/tcg/pmp.c @@ -415,6 +415,10 @@ bool pmp_hart_has_privs(CPURISCVState *env, hwaddr addr, * from low to high */ for (i = 0; i < pmp_regions; i++) { + if (pmp_get_a_field(env->pmp_state.pmp[i].cfg_reg) == PMP_AMATCH_OFF) { + continue; + } + s = pmp_is_in_range(env, i, addr); e = pmp_is_in_range(env, i, addr + pmp_size - 1); @@ -427,10 +431,7 @@ bool pmp_hart_has_privs(CPURISCVState *env, hwaddr addr, } /* fully inside */ - const uint8_t a_field = - pmp_get_a_field(env->pmp_state.pmp[i].cfg_reg); - - if (((s + e) == 2) && (PMP_AMATCH_OFF != a_field)) { + if (s + e == 2) { /* * If the PMP entry is not off and the address is in range, * do the priv check -- 2.43.0