qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	qemu-devel@nongnu.org
Cc: imammedo@redhat.com, peterx@redhat.com
Subject: Re: [PATCH 4/8] accel/tcg: introduce tcg_kick_vcpu_thread
Date: Mon, 11 Aug 2025 10:33:32 +0200	[thread overview]
Message-ID: <0b1f2388-a1a8-457e-a60c-3f34f6f1bf80@linaro.org> (raw)
In-Reply-To: <78ceb108-670b-4be6-9d74-4521c0b6d872@redhat.com>

On 11/8/25 08:10, Paolo Bonzini wrote:
> On 8/10/25 01:26, Richard Henderson wrote:
>> On 8/9/25 04:59, Paolo Bonzini wrote:
>>> +void tcg_kick_vcpu_thread(CPUState *cpu)
>>> +{
>>> +    /*
>>> +     * Ensure cpu_exec will see the reason why the exit request was 
>>> set.
>>> +     * FIXME: this is not always needed.  Other accelerators instead
>>> +     * read interrupt_request and set exit_request on demand from the
>>> +     * CPU thread; see kvm_arch_pre_run() for example.
>>> +     */
>>> +    qatomic_store_release(&cpu->exit_request, 1);
>>> +
>>> +    /* Ensure cpu_exec will see the exit request after TCG has 
>>> exited.  */
>>> +    qatomic_store_release(&cpu->neg.icount_decr.u16.high, -1);
>>> +}
>>
>> So, now both cpu_exit and cpu_kick set exit_request.
>>
>> You ifdef this out again for user-only in patch 7, but this does 
>> suggest that kick and exit are essentially interchangeable.  You 
>> rearrange things a bit in patch 6, but it's still not clear to me what 
>> the difference between the two should be.  There's certainly nothing 
>> at all in include/hw/core/cpu.h to differentiate them.
>>
>> Should we instead eliminate one of kick or exit, unifying the paths?
> In cpu-exec.c terms, qemu_cpu_kick() *should* go out to 
> cpu_handle_interrupt() whereas cpu_exit() *should* go out to 
> cpu_handle_exception().  The difference matters for some accelerators 
> where qemu_cpu_kick() tries not to take the BQL in the vCPU thread.

While I'm still learning this area, this answer makes sense to me.
If this is correct (reviewed by others), can we document it in the
corresponding prototype declarations?

> 
> Until now TCG's implementation of kick_vcpu_thread set both exit_request 
> and interrupt_request, and I'm not changing that yet for system 
> emulation.

For long I tried to figure out why both are set there.

> Patch 7 does that for user-mode emulation, because it's 
> trivial: neither linux-user not bsd-user use qemu_cpu_kick() directly.
> 
> Paolo
> 
> 



  reply	other threads:[~2025-08-11  8:35 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-08 18:58 [PATCH 0/8] accel, cpus: clean up cpu->exit_request Paolo Bonzini
2025-08-08 18:58 ` [PATCH 1/8] accel: use store_release/load_acquire for cross-thread exit_request Paolo Bonzini
2025-08-09 22:41   ` Richard Henderson
2025-08-11 19:31   ` Peter Xu
2025-08-08 18:58 ` [PATCH 2/8] accel/hvf: check exit_request before running the vCPU Paolo Bonzini
2025-08-08 21:28   ` Philippe Mathieu-Daudé
2025-08-09 23:09   ` Richard Henderson
2025-08-11  7:06     ` Paolo Bonzini
2025-08-08 18:59 ` [PATCH 3/8] accel: use atomic accesses for exit_request Paolo Bonzini
2025-08-08 21:04   ` Philippe Mathieu-Daudé
2025-08-09 23:10   ` Richard Henderson
2025-08-11 14:49   ` Alex Bennée
2025-08-11 19:33   ` Peter Xu
2025-08-08 18:59 ` [PATCH 4/8] accel/tcg: introduce tcg_kick_vcpu_thread Paolo Bonzini
2025-08-08 21:15   ` Philippe Mathieu-Daudé
2025-08-09 23:16     ` Richard Henderson
2025-08-09 23:26   ` Richard Henderson
2025-08-11  6:10     ` Paolo Bonzini
2025-08-11  8:33       ` Philippe Mathieu-Daudé [this message]
2025-08-11 13:34         ` Philippe Mathieu-Daudé
2025-08-08 18:59 ` [PATCH 5/8] cpus: remove TCG-ism from cpu_exit() Paolo Bonzini
2025-08-08 21:17   ` Philippe Mathieu-Daudé
2025-08-09 23:17   ` Richard Henderson
2025-08-08 18:59 ` [PATCH 6/8] cpus: properly kick CPUs out of inner execution loop Paolo Bonzini
2025-08-11 12:56   ` Alex Bennée
2025-08-08 18:59 ` [PATCH 7/8] tcg/user: do not set exit_request gratuitously Paolo Bonzini
2025-08-08 21:21   ` Philippe Mathieu-Daudé
2025-08-08 21:45     ` Paolo Bonzini
2025-08-08 18:59 ` [PATCH 8/8] accel: make all calls to qemu_wait_io_event look the same Paolo Bonzini
2025-08-08 21:24   ` Philippe Mathieu-Daudé
2025-08-09 23:34   ` Richard Henderson

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=0b1f2388-a1a8-457e-a60c-3f34f6f1bf80@linaro.org \
    --to=philmd@linaro.org \
    --cc=imammedo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.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 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).