On 2023/6/5 19:49, Himanshu Chauhan wrote:
On an address match, skip checking for default permissions and return error
based on access defined in PMP configuration.
v2 Changes:
o Removed goto to return in place when address matches
o Call pmp_hart_has_privs_default at the end of the loop
Fixes: 90b1fafce06 ("target/riscv: Smepmp: Skip applying default rules when address
matches")
Signed-off-by: Himanshu Chauhan <hchau...@ventanamicro.com>
---
target/riscv/pmp.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c
index 418738afd8..976b199156 100644
--- a/target/riscv/pmp.c
+++ b/target/riscv/pmp.c
@@ -291,7 +291,6 @@ bool pmp_hart_has_privs(CPURISCVState *env, target_ulong
addr,
pmp_priv_t *allowed_privs, target_ulong mode)
{
int i = 0;
- bool ret = false;
int pmp_size = 0;
target_ulong s = 0;
target_ulong e = 0;
@@ -435,17 +434,12 @@ bool pmp_hart_has_privs(CPURISCVState *env, target_ulong
addr,
* defined with PMP must be used. We shouldn't fallback on
* finding default privileges.
*/
- ret = true;
- break;
+ return (privs & *allowed_privs) == privs ? true : false;
This conditional assignment is unnecessary.
+ return (privs & *allowed_privs) ==
privs;
Otherwise, Reviewed-by: Weiwei Li <liwei...@iscas.ac.cn>
Weiwei Li
}
}
/* No rule matched */
- if (!ret) {
- ret = pmp_hart_has_privs_default(env, privs, allowed_privs, mode);
- }
-
- return ret;
+ return pmp_hart_has_privs_default(env, privs, allowed_privs, mode);
}
/*