While addition with bool variables isn't wrong, as they promote
to int, it's odd.  Use normal boolean operators instead.

Signed-off-by: Richard Henderson <[email protected]>
---
 target/riscv/tcg/pmp.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/target/riscv/tcg/pmp.c b/target/riscv/tcg/pmp.c
index 5ea0e5b6c3..fc035c95cf 100644
--- a/target/riscv/tcg/pmp.c
+++ b/target/riscv/tcg/pmp.c
@@ -413,16 +413,8 @@ bool pmp_hart_has_privs(CPURISCVState *env, hwaddr addr,
         s = pmp_is_in_range(env, i, addr);
         e = pmp_is_in_range(env, i, addr + pmp_size - 1);
 
-        /* partially inside */
-        if ((s + e) == 1) {
-            qemu_log_mask(LOG_GUEST_ERROR,
-                          "pmp violation - access is partially inside\n");
-            *allowed_privs = 0;
-            return false;
-        }
-
         /* fully inside */
-        if (s + e == 2) {
+        if (s && e) {
             /*
              * If the PMP entry is not off and the address is in range,
              * do the priv check
@@ -517,6 +509,14 @@ bool pmp_hart_has_privs(CPURISCVState *env, hwaddr addr,
              */
             return (privs & *allowed_privs) == privs;
         }
+
+        /* partially inside */
+        if (s || e) {
+            qemu_log_mask(LOG_GUEST_ERROR,
+                          "pmp violation - access is partially inside\n");
+            *allowed_privs = 0;
+            return false;
+        }
     }
 
     /* No rule matched */
-- 
2.43.0


Reply via email to