All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Philippe Mathieu-Daudé" <philmd@oss.qualcomm.com>
Cc: qemu-devel@nongnu.org,  Ashish Anand <ashish.a6@samsung.com>,
	 Peter Maydell <peter.maydell@linaro.org>,
	 qemu-arm@nongnu.org
Subject: Re: [PATCH] target/arm: Kick the other vCPUs on SEV under TCG round-robin
Date: Tue, 10 Nov 2026 10:53:18 +0000	[thread overview]
Message-ID: <875wy5c601.fsf@draig.linaro.org> (raw)
In-Reply-To: <20261109142319.73878-1-philmd@oss.qualcomm.com> ("Philippe Mathieu-Daudé"'s message of "Mon, 9 Nov 2026 15:23:19 +0100")

Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> writes:

> In round-robin (single-thread) TCG, all vCPUs share one
> host thread, so qemu_cpu_is_self() is true for every vCPU.

This makes me think we should check other cases of qemu_cpu_is_self. For
example:

  void icount_handle_interrupt(CPUState *cpu, int mask)
  {
      int old_mask = cpu->interrupt_request;

      tcg_handle_interrupt(cpu, mask);
      if (qemu_cpu_is_self(cpu) &&
          !cpu->neg.can_do_io
          && (mask & ~old_mask) != 0) {
          cpu_abort(cpu, "Raised interrupt while not in I/O function");
      }
  }

Besides current_cpu does change even in rr so why I we testing against
thread rather than CPUState?

>
> The SEV helper used it to skip the kick of the issuing vCPU,
> and so skipped it for every other vCPU too: a vCPU sleeping
> in WFE is only woken when the RR kick timer fires.
>
> Compare against the issuing vCPU instead.
>
> Fixes: d238858bff60 ("target/arm: Implement WFE, SEV and SEVONPEND")
> Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
> ---
>  target/arm/tcg/op_helper.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/target/arm/tcg/op_helper.c b/target/arm/tcg/op_helper.c
> index 6a673e5ae6e8..173dd0e5151a 100644
> --- a/target/arm/tcg/op_helper.c
> +++ b/target/arm/tcg/op_helper.c
> @@ -470,11 +470,11 @@ void HELPER(wfit)(CPUARMState *env, uint32_t rd)
>  
>  void HELPER(sev)(CPUARMState *env)
>  {
> -    CPUState *cs = env_cpu(env);
> +    CPUState *self = env_cpu(env), *cs;
>      CPU_FOREACH(cs) {
>          ARMCPU *target_cpu = ARM_CPU(cs);
>          target_cpu->env.event_register = true;
> -        if (!qemu_cpu_is_self(cs)) {
> +        if (cs != self) {
>              qemu_cpu_kick(cs);
>          }
>      }

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


      parent reply	other threads:[~2026-11-10 10:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-09 14:23 [PATCH] target/arm: Kick the other vCPUs on SEV under TCG round-robin Philippe Mathieu-Daudé
2026-11-10  7:28 ` Philippe Mathieu-Daudé
2026-11-10 10:53 ` Alex Bennée [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=875wy5c601.fsf@draig.linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=ashish.a6@samsung.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@oss.qualcomm.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.