qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] target/arm: fix for hvf regression in v10.2-rc1 (#3228)
@ 2025-12-05 15:11 Alex Bennée
  2025-12-05 15:11 ` [PATCH 1/2] Revert "target/arm: Re-use arm_is_psci_call() in HVF" Alex Bennée
  2025-12-05 15:11 ` [PATCH 2/2] target/arm: ensure PSCI register updates are flushed Alex Bennée
  0 siblings, 2 replies; 10+ messages in thread
From: Alex Bennée @ 2025-12-05 15:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf,
	Alex Bennée

Although bisecting indicated 93ac765076a (target/arm/hvf: Keep calling
hv_vcpu_run() in loop) was the culprit I noticed that using gdbstub
would get further in the run due to the enforced syncing from being
debugged.

As far as I can tell the kernel got confused by contradictory responses
from PSCI while booting up and then never recovered.

Please test.

Alex

Alex Bennée (2):
  Revert "target/arm: Re-use arm_is_psci_call() in HVF"
  target/arm: ensure PSCI register updates are flushed

 target/arm/hvf/hvf.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

-- 
2.47.3



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

* [PATCH 1/2] Revert "target/arm: Re-use arm_is_psci_call() in HVF"
  2025-12-05 15:11 [PATCH 0/2] target/arm: fix for hvf regression in v10.2-rc1 (#3228) Alex Bennée
@ 2025-12-05 15:11 ` Alex Bennée
  2025-12-09  7:02   ` Philippe Mathieu-Daudé
  2025-12-05 15:11 ` [PATCH 2/2] target/arm: ensure PSCI register updates are flushed Alex Bennée
  1 sibling, 1 reply; 10+ messages in thread
From: Alex Bennée @ 2025-12-05 15:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf,
	Alex Bennée

This breaks a pure HVF (--disable-tcg) build because the fallback stub
will always report false.

This reverts commit 4695daacc068cd0aa9a91c0063c4f2a9ec9b7ba1.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 target/arm/hvf/hvf.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index de1e8fb8a05..70d34063df8 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -1935,7 +1935,7 @@ static int hvf_handle_exception(CPUState *cpu, hv_vcpu_exit_exception_t *excp)
         break;
     case EC_AA64_HVC:
         cpu_synchronize_state(cpu);
-        if (arm_is_psci_call(arm_cpu, EXCP_HVC)) {
+        if (arm_cpu->psci_conduit == QEMU_PSCI_CONDUIT_HVC) {
             /* Do NOT advance $pc for HVC */
             if (!hvf_handle_psci_call(cpu)) {
                 trace_hvf_unknown_hvc(env->pc, env->xregs[0]);
@@ -1949,7 +1949,7 @@ static int hvf_handle_exception(CPUState *cpu, hv_vcpu_exit_exception_t *excp)
         break;
     case EC_AA64_SMC:
         cpu_synchronize_state(cpu);
-        if (arm_is_psci_call(arm_cpu, EXCP_SMC)) {
+        if (arm_cpu->psci_conduit == QEMU_PSCI_CONDUIT_SMC) {
             /* Secure Monitor Call exception, we need to advance $pc */
             advance_pc = true;
 
-- 
2.47.3



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

* [PATCH 2/2] target/arm: ensure PSCI register updates are flushed
  2025-12-05 15:11 [PATCH 0/2] target/arm: fix for hvf regression in v10.2-rc1 (#3228) Alex Bennée
  2025-12-05 15:11 ` [PATCH 1/2] Revert "target/arm: Re-use arm_is_psci_call() in HVF" Alex Bennée
@ 2025-12-05 15:11 ` Alex Bennée
  2025-12-08 15:30   ` Zenghui Yu
  2025-12-09  7:04   ` Philippe Mathieu-Daudé
  1 sibling, 2 replies; 10+ messages in thread
From: Alex Bennée @ 2025-12-05 15:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf,
	Alex Bennée

When we handle a host call we report state back to the caller via
registers. Set vcpu_dirty to indicate QEMU is currently the reference
and hoist the flush_cpu_state() and make the call unconditional.

Fixes: https://gitlab.com/qemu-project/qemu/-/issues/3228
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 target/arm/hvf/hvf.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index 70d34063df8..8e2940217a6 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -1942,6 +1942,7 @@ static int hvf_handle_exception(CPUState *cpu, hv_vcpu_exit_exception_t *excp)
                 /* SMCCC 1.3 section 5.2 says every unknown SMCCC call returns -1 */
                 env->xregs[0] = -1;
             }
+            cpu->vcpu_dirty = true;
         } else {
             trace_hvf_unknown_hvc(env->pc, env->xregs[0]);
             hvf_raise_exception(cpu, EXCP_UDEF, syn_uncategorized(), 1);
@@ -1958,6 +1959,7 @@ static int hvf_handle_exception(CPUState *cpu, hv_vcpu_exit_exception_t *excp)
                 /* SMCCC 1.3 section 5.2 says every unknown SMCCC call returns -1 */
                 env->xregs[0] = -1;
             }
+            cpu->vcpu_dirty = true;
         } else {
             trace_hvf_unknown_smc(env->xregs[0]);
             hvf_raise_exception(cpu, EXCP_UDEF, syn_uncategorized(), 1);
@@ -1980,10 +1982,12 @@ static int hvf_handle_exception(CPUState *cpu, hv_vcpu_exit_exception_t *excp)
         error_report("0x%llx: unhandled exception ec=0x%x", env->pc, ec);
     }
 
+    /* flush any changed cpu state back to HVF */
+    flush_cpu_state(cpu);
+
     if (advance_pc) {
         uint64_t pc;
 
-        flush_cpu_state(cpu);
 
         r = hv_vcpu_get_reg(cpu->accel->fd, HV_REG_PC, &pc);
         assert_hvf_ok(r);
-- 
2.47.3



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

* Re: [PATCH 2/2] target/arm: ensure PSCI register updates are flushed
  2025-12-05 15:11 ` [PATCH 2/2] target/arm: ensure PSCI register updates are flushed Alex Bennée
@ 2025-12-08 15:30   ` Zenghui Yu
  2025-12-08 17:08     ` Alex Bennée
  2025-12-09  7:04   ` Philippe Mathieu-Daudé
  1 sibling, 1 reply; 10+ messages in thread
From: Zenghui Yu @ 2025-12-08 15:30 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf

Hi Alex,

On 2025/12/5 23:11, Alex Bennée wrote:
> When we handle a host call we report state back to the caller via
> registers. Set vcpu_dirty to indicate QEMU is currently the reference
> and hoist the flush_cpu_state() and make the call unconditional.
> 
> Fixes: https://gitlab.com/qemu-project/qemu/-/issues/3228
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

This fixes the guest boot issue.

However I notice that some (all?) HMP commands (e.g., "info registers")
don't return and result in guest hang. Haven't dig further though.

Thanks,
Zenghui


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

* Re: [PATCH 2/2] target/arm: ensure PSCI register updates are flushed
  2025-12-08 15:30   ` Zenghui Yu
@ 2025-12-08 17:08     ` Alex Bennée
  2025-12-09  0:54       ` Zenghui Yu
  2025-12-09  7:04       ` Philippe Mathieu-Daudé
  0 siblings, 2 replies; 10+ messages in thread
From: Alex Bennée @ 2025-12-08 17:08 UTC (permalink / raw)
  To: Zenghui Yu
  Cc: qemu-devel, Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf

Zenghui Yu <zenghui.yu@linux.dev> writes:

> Hi Alex,
>
> On 2025/12/5 23:11, Alex Bennée wrote:
>> When we handle a host call we report state back to the caller via
>> registers. Set vcpu_dirty to indicate QEMU is currently the reference
>> and hoist the flush_cpu_state() and make the call unconditional.
>> 
>> Fixes: https://gitlab.com/qemu-project/qemu/-/issues/3228
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> This fixes the guest boot issue.
>
> However I notice that some (all?) HMP commands (e.g., "info registers")
> don't return and result in guest hang. Haven't dig further though.

Does this fix it:

--8<---------------cut here---------------start------------->8---
target/arm: make HV_EXIT_REASON_CANCELED leave main loop

Without this we can spin tightly in the main HVF dispatch loop and
never release the lock long enough.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

1 file changed, 1 insertion(+)
 target/arm/hvf/hvf.c | 1 +

modified    target/arm/hvf/hvf.c
@@ -2020,6 +2020,7 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_exit_t *exit)
         break;
     case HV_EXIT_REASON_CANCELED:
         /* we got kicked, no exit to process */
+        ret = -1;
         break;
     default:
         g_assert_not_reached();
--8<---------------cut here---------------end--------------->8---

>
> Thanks,
> Zenghui

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


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

* Re: [PATCH 2/2] target/arm: ensure PSCI register updates are flushed
  2025-12-08 17:08     ` Alex Bennée
@ 2025-12-09  0:54       ` Zenghui Yu
  2025-12-09  4:48         ` osy
  2025-12-09  7:04       ` Philippe Mathieu-Daudé
  1 sibling, 1 reply; 10+ messages in thread
From: Zenghui Yu @ 2025-12-09  0:54 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf

On 2025/12/9 01:08, Alex Bennée wrote:
> Zenghui Yu <zenghui.yu@linux.dev> writes:
> 
> > Hi Alex,
> >
> > On 2025/12/5 23:11, Alex Bennée wrote:
> > > When we handle a host call we report state back to the caller via
> > > registers. Set vcpu_dirty to indicate QEMU is currently the reference
> > > and hoist the flush_cpu_state() and make the call unconditional.
> > >
> > > Fixes: https://gitlab.com/qemu-project/qemu/-/issues/3228
> > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> >
> > This fixes the guest boot issue.
> >
> > However I notice that some (all?) HMP commands (e.g., "info registers")
> > don't return and result in guest hang. Haven't dig further though.
> 
> Does this fix it:
> 
> --8<---------------cut here---------------start------------->8---
> target/arm: make HV_EXIT_REASON_CANCELED leave main loop
> 
> Without this we can spin tightly in the main HVF dispatch loop and
> never release the lock long enough.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> 
> 1 file changed, 1 insertion(+)
>  target/arm/hvf/hvf.c | 1 +
> 
> modified    target/arm/hvf/hvf.c
> @@ -2020,6 +2020,7 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_exit_t *exit)
>          break;
>      case HV_EXIT_REASON_CANCELED:
>          /* we got kicked, no exit to process */
> +        ret = -1;
>          break;
>      default:
>          g_assert_not_reached();
> --8<---------------cut here---------------end--------------->8---

Yes it works. Please feel free to add

Tested-by: Zenghui Yu <zenghui.yu@linux.dev>

on it and patch #2. Thanks for the fixes!

Zenghui


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

* Re: [PATCH 2/2] target/arm: ensure PSCI register updates are flushed
  2025-12-09  0:54       ` Zenghui Yu
@ 2025-12-09  4:48         ` osy
  0 siblings, 0 replies; 10+ messages in thread
From: osy @ 2025-12-09  4:48 UTC (permalink / raw)
  To: Zenghui Yu
  Cc: Alex Bennée, qemu-devel, Mads Ynddal, Peter Maydell,
	qemu-arm, Alexander Graf

Tested-by: Joelle van Dyne <j@getutm.app>

(With HV_EXIT_REASON_CANCELED change, otherwise it hangs on shutdown)

On Mon, Dec 8, 2025 at 4:56 PM Zenghui Yu <zenghui.yu@linux.dev> wrote:
>
> On 2025/12/9 01:08, Alex Bennée wrote:
> > Zenghui Yu <zenghui.yu@linux.dev> writes:
> >
> > > Hi Alex,
> > >
> > > On 2025/12/5 23:11, Alex Bennée wrote:
> > > > When we handle a host call we report state back to the caller via
> > > > registers. Set vcpu_dirty to indicate QEMU is currently the reference
> > > > and hoist the flush_cpu_state() and make the call unconditional.
> > > >
> > > > Fixes: https://gitlab.com/qemu-project/qemu/-/issues/3228
> > > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> > >
> > > This fixes the guest boot issue.
> > >
> > > However I notice that some (all?) HMP commands (e.g., "info registers")
> > > don't return and result in guest hang. Haven't dig further though.
> >
> > Does this fix it:
> >
> > --8<---------------cut here---------------start------------->8---
> > target/arm: make HV_EXIT_REASON_CANCELED leave main loop
> >
> > Without this we can spin tightly in the main HVF dispatch loop and
> > never release the lock long enough.
> >
> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> >
> > 1 file changed, 1 insertion(+)
> >  target/arm/hvf/hvf.c | 1 +
> >
> > modified    target/arm/hvf/hvf.c
> > @@ -2020,6 +2020,7 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_exit_t *exit)
> >          break;
> >      case HV_EXIT_REASON_CANCELED:
> >          /* we got kicked, no exit to process */
> > +        ret = -1;
> >          break;
> >      default:
> >          g_assert_not_reached();
> > --8<---------------cut here---------------end--------------->8---
>
> Yes it works. Please feel free to add
>
> Tested-by: Zenghui Yu <zenghui.yu@linux.dev>
>
> on it and patch #2. Thanks for the fixes!
>
> Zenghui
>


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

* Re: [PATCH 1/2] Revert "target/arm: Re-use arm_is_psci_call() in HVF"
  2025-12-05 15:11 ` [PATCH 1/2] Revert "target/arm: Re-use arm_is_psci_call() in HVF" Alex Bennée
@ 2025-12-09  7:02   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-09  7:02 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf

On 5/12/25 16:11, Alex Bennée wrote:
> This breaks a pure HVF (--disable-tcg) build because the fallback stub
> will always report false.

I guess I never posted the patch that moves arm_is_psci_call() from
tcg/ subfolder... Odd.

> 
> This reverts commit 4695daacc068cd0aa9a91c0063c4f2a9ec9b7ba1.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   target/arm/hvf/hvf.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)

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



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

* Re: [PATCH 2/2] target/arm: ensure PSCI register updates are flushed
  2025-12-05 15:11 ` [PATCH 2/2] target/arm: ensure PSCI register updates are flushed Alex Bennée
  2025-12-08 15:30   ` Zenghui Yu
@ 2025-12-09  7:04   ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-09  7:04 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf

On 5/12/25 16:11, Alex Bennée wrote:
> When we handle a host call we report state back to the caller via
> registers. Set vcpu_dirty to indicate QEMU is currently the reference
> and hoist the flush_cpu_state() and make the call unconditional.
> 
> Fixes: https://gitlab.com/qemu-project/qemu/-/issues/3228
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   target/arm/hvf/hvf.c | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)

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



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

* Re: [PATCH 2/2] target/arm: ensure PSCI register updates are flushed
  2025-12-08 17:08     ` Alex Bennée
  2025-12-09  0:54       ` Zenghui Yu
@ 2025-12-09  7:04       ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-09  7:04 UTC (permalink / raw)
  To: Alex Bennée, Zenghui Yu
  Cc: qemu-devel, Mads Ynddal, Peter Maydell, qemu-arm, Alexander Graf

On 8/12/25 18:08, Alex Bennée wrote:

> --8<---------------cut here---------------start------------->8---
> target/arm: make HV_EXIT_REASON_CANCELED leave main loop
> 
> Without this we can spin tightly in the main HVF dispatch loop and
> never release the lock long enough.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

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

> 
> 1 file changed, 1 insertion(+)
>  target/arm/hvf/hvf.c | 1 +
> 
> modified    target/arm/hvf/hvf.c
> @@ -2020,6 +2020,7 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_exit_t *exit)
>           break;
>       case HV_EXIT_REASON_CANCELED:
>           /* we got kicked, no exit to process */
> +        ret = -1;
>           break;
>       default:
>           g_assert_not_reached();
> --8<---------------cut here---------------end--------------->8---



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

end of thread, other threads:[~2025-12-09  7:05 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-05 15:11 [PATCH 0/2] target/arm: fix for hvf regression in v10.2-rc1 (#3228) Alex Bennée
2025-12-05 15:11 ` [PATCH 1/2] Revert "target/arm: Re-use arm_is_psci_call() in HVF" Alex Bennée
2025-12-09  7:02   ` Philippe Mathieu-Daudé
2025-12-05 15:11 ` [PATCH 2/2] target/arm: ensure PSCI register updates are flushed Alex Bennée
2025-12-08 15:30   ` Zenghui Yu
2025-12-08 17:08     ` Alex Bennée
2025-12-09  0:54       ` Zenghui Yu
2025-12-09  4:48         ` osy
2025-12-09  7:04       ` Philippe Mathieu-Daudé
2025-12-09  7:04   ` Philippe Mathieu-Daudé

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).