qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] target/arm: Fix gdbstub for m-profile (#1421)
@ 2023-02-21  3:41 Richard Henderson
  2023-02-21  3:41 ` [PATCH 1/2] Revert "target/arm: Merge regime_is_secure into get_phys_addr" Richard Henderson
  2023-02-21  3:41 ` [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile Richard Henderson
  0 siblings, 2 replies; 7+ messages in thread
From: Richard Henderson @ 2023-02-21  3:41 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-arm

This will conflict with FEAT_RME patches; I'll fix that up later.


r~


Richard Henderson (2):
  Revert "target/arm: Merge regime_is_secure into get_phys_addr"
  target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile

 target/arm/ptw.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] Revert "target/arm: Merge regime_is_secure into get_phys_addr"
  2023-02-21  3:41 [PATCH 0/2] target/arm: Fix gdbstub for m-profile (#1421) Richard Henderson
@ 2023-02-21  3:41 ` Richard Henderson
  2023-02-21  7:59   ` Philippe Mathieu-Daudé
  2023-02-21  3:41 ` [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile Richard Henderson
  1 sibling, 1 reply; 7+ messages in thread
From: Richard Henderson @ 2023-02-21  3:41 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-arm

This reverts commit 03bea66e7fa3af42976ceafb20512c59abf2e699,
but restore into ptw.c instead of internals.h.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/arm/ptw.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/target/arm/ptw.c b/target/arm/ptw.c
index 2b125fff44..cb073ac477 100644
--- a/target/arm/ptw.c
+++ b/target/arm/ptw.c
@@ -2926,12 +2926,9 @@ bool get_phys_addr_with_secure(CPUARMState *env, target_ulong address,
                                      result, fi);
 }
 
-bool get_phys_addr(CPUARMState *env, target_ulong address,
-                   MMUAccessType access_type, ARMMMUIdx mmu_idx,
-                   GetPhysAddrResult *result, ARMMMUFaultInfo *fi)
+/* Return true if this address translation regime is secure */
+static bool regime_is_secure(CPUARMState *env, ARMMMUIdx mmu_idx)
 {
-    bool is_secure;
-
     switch (mmu_idx) {
     case ARMMMUIdx_E10_0:
     case ARMMMUIdx_E10_1:
@@ -2943,16 +2940,14 @@ bool get_phys_addr(CPUARMState *env, target_ulong address,
     case ARMMMUIdx_Stage1_E1:
     case ARMMMUIdx_Stage1_E1_PAN:
     case ARMMMUIdx_E2:
-        is_secure = arm_is_secure_below_el3(env);
-        break;
+        return arm_is_secure_below_el3(env);
     case ARMMMUIdx_Stage2:
     case ARMMMUIdx_Phys_NS:
     case ARMMMUIdx_MPrivNegPri:
     case ARMMMUIdx_MUserNegPri:
     case ARMMMUIdx_MPriv:
     case ARMMMUIdx_MUser:
-        is_secure = false;
-        break;
+        return false;
     case ARMMMUIdx_E3:
     case ARMMMUIdx_Stage2_S:
     case ARMMMUIdx_Phys_S:
@@ -2960,13 +2955,18 @@ bool get_phys_addr(CPUARMState *env, target_ulong address,
     case ARMMMUIdx_MSUserNegPri:
     case ARMMMUIdx_MSPriv:
     case ARMMMUIdx_MSUser:
-        is_secure = true;
-        break;
-    default:
-        g_assert_not_reached();
+        return true;
     }
+    g_assert_not_reached();
+}
+
+bool get_phys_addr(CPUARMState *env, target_ulong address,
+                   MMUAccessType access_type, ARMMMUIdx mmu_idx,
+                   GetPhysAddrResult *result, ARMMMUFaultInfo *fi)
+{
     return get_phys_addr_with_secure(env, address, access_type, mmu_idx,
-                                     is_secure, result, fi);
+                                     regime_is_secure(env, mmu_idx),
+                                     result, fi);
 }
 
 hwaddr arm_cpu_get_phys_page_attrs_debug(CPUState *cs, vaddr addr,
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile
  2023-02-21  3:41 [PATCH 0/2] target/arm: Fix gdbstub for m-profile (#1421) Richard Henderson
  2023-02-21  3:41 ` [PATCH 1/2] Revert "target/arm: Merge regime_is_secure into get_phys_addr" Richard Henderson
@ 2023-02-21  3:41 ` Richard Henderson
  2023-02-21  8:01   ` Philippe Mathieu-Daudé
  2023-02-21 16:56   ` Peter Maydell
  1 sibling, 2 replies; 7+ messages in thread
From: Richard Henderson @ 2023-02-21  3:41 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-arm

M-profile is not supported by arm_is_secure, so using it as
a replacement when bypassing get_phys_addr was incorrect.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1421
Fixes: 4a35855682ce ("target/arm: Plumb debug into S1Translate")
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/arm/ptw.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/target/arm/ptw.c b/target/arm/ptw.c
index cb073ac477..057cc9f641 100644
--- a/target/arm/ptw.c
+++ b/target/arm/ptw.c
@@ -2974,9 +2974,10 @@ hwaddr arm_cpu_get_phys_page_attrs_debug(CPUState *cs, vaddr addr,
 {
     ARMCPU *cpu = ARM_CPU(cs);
     CPUARMState *env = &cpu->env;
+    ARMMMUIdx mmu_idx = arm_mmu_idx(env);
     S1Translate ptw = {
-        .in_mmu_idx = arm_mmu_idx(env),
-        .in_secure = arm_is_secure(env),
+        .in_mmu_idx = mmu_idx,
+        .in_secure = regime_is_secure(env, mmu_idx),
         .in_debug = true,
     };
     GetPhysAddrResult res = {};
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] Revert "target/arm: Merge regime_is_secure into get_phys_addr"
  2023-02-21  3:41 ` [PATCH 1/2] Revert "target/arm: Merge regime_is_secure into get_phys_addr" Richard Henderson
@ 2023-02-21  7:59   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-21  7:59 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: qemu-arm

On 21/2/23 04:41, Richard Henderson wrote:
> This reverts commit 03bea66e7fa3af42976ceafb20512c59abf2e699,
> but restore into ptw.c instead of internals.h.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   target/arm/ptw.c | 28 ++++++++++++++--------------
>   1 file changed, 14 insertions(+), 14 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile
  2023-02-21  3:41 ` [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile Richard Henderson
@ 2023-02-21  8:01   ` Philippe Mathieu-Daudé
  2023-02-21 16:56   ` Peter Maydell
  1 sibling, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-21  8:01 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: qemu-arm

On 21/2/23 04:41, Richard Henderson wrote:
> M-profile is not supported by arm_is_secure, so using it as
> a replacement when bypassing get_phys_addr was incorrect.
> 
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1421
> Fixes: 4a35855682ce ("target/arm: Plumb debug into S1Translate")
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   target/arm/ptw.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/target/arm/ptw.c b/target/arm/ptw.c
> index cb073ac477..057cc9f641 100644
> --- a/target/arm/ptw.c
> +++ b/target/arm/ptw.c
> @@ -2974,9 +2974,10 @@ hwaddr arm_cpu_get_phys_page_attrs_debug(CPUState *cs, vaddr addr,
>   {
>       ARMCPU *cpu = ARM_CPU(cs);
>       CPUARMState *env = &cpu->env;
> +    ARMMMUIdx mmu_idx = arm_mmu_idx(env);
>       S1Translate ptw = {
> -        .in_mmu_idx = arm_mmu_idx(env),
> -        .in_secure = arm_is_secure(env),
> +        .in_mmu_idx = mmu_idx,
> +        .in_secure = regime_is_secure(env, mmu_idx),
>           .in_debug = true,
>       };
>       GetPhysAddrResult res = {};

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile
  2023-02-21  3:41 ` [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile Richard Henderson
  2023-02-21  8:01   ` Philippe Mathieu-Daudé
@ 2023-02-21 16:56   ` Peter Maydell
  2023-02-21 17:11     ` Richard Henderson
  1 sibling, 1 reply; 7+ messages in thread
From: Peter Maydell @ 2023-02-21 16:56 UTC (permalink / raw)
  To: Richard Henderson; +Cc: qemu-devel, qemu-arm

On Tue, 21 Feb 2023 at 03:42, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> M-profile is not supported by arm_is_secure, so using it as
> a replacement when bypassing get_phys_addr was incorrect.

That's pretty non-obvious. I think we should either
make arm_is_secure() handle M-profile[*], or else have
it assert if you try to call it for an M-profile CPU.

[*] i.e.
  if (arm_feature(env, ARM_FEATURE_M)) {
      return env->v7m.secure;
  }
at the top of the function.

If we do the latter we wouldn't need the revert in patch 1,
right? Or do you think regime_is_secure() is a better
choice of function here anyway?

thanks
-- PMM


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile
  2023-02-21 16:56   ` Peter Maydell
@ 2023-02-21 17:11     ` Richard Henderson
  0 siblings, 0 replies; 7+ messages in thread
From: Richard Henderson @ 2023-02-21 17:11 UTC (permalink / raw)
  To: Peter Maydell; +Cc: qemu-devel, qemu-arm

On 2/21/23 06:56, Peter Maydell wrote:
> On Tue, 21 Feb 2023 at 03:42, Richard Henderson
> <richard.henderson@linaro.org> wrote:
>>
>> M-profile is not supported by arm_is_secure, so using it as
>> a replacement when bypassing get_phys_addr was incorrect.
> 
> That's pretty non-obvious. I think we should either
> make arm_is_secure() handle M-profile[*], or else have
> it assert if you try to call it for an M-profile CPU.
> 
> [*] i.e.
>    if (arm_feature(env, ARM_FEATURE_M)) {
>        return env->v7m.secure;
>    }
> at the top of the function.
> 
> If we do the latter we wouldn't need the revert in patch 1,
> right? Or do you think regime_is_secure() is a better
> choice of function here anyway?

You're absolutely right that it's surprising, as it surprised me.
I'll re-spin.

r~


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-02-21 17:12 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-21  3:41 [PATCH 0/2] target/arm: Fix gdbstub for m-profile (#1421) Richard Henderson
2023-02-21  3:41 ` [PATCH 1/2] Revert "target/arm: Merge regime_is_secure into get_phys_addr" Richard Henderson
2023-02-21  7:59   ` Philippe Mathieu-Daudé
2023-02-21  3:41 ` [PATCH 2/2] target/arm: Fix arm_cpu_get_phys_page_attrs_debug for m-profile Richard Henderson
2023-02-21  8:01   ` Philippe Mathieu-Daudé
2023-02-21 16:56   ` Peter Maydell
2023-02-21 17:11     ` Richard Henderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).