From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org, Richard Henderson <richard.henderson@linaro.org>
Subject: Re: [PATCH 3/3] accel/tcg: Make TCGCPUOps::cpu_exec_halt mandatory
Date: Tue, 11 Jun 2024 11:58:24 +0200 [thread overview]
Message-ID: <2cfbd01f-c5c3-44d7-b222-82ce378273d5@linaro.org> (raw)
In-Reply-To: <CAFEAcA_1JyzM9WiBsQ-3YxNmH3i1usnU3iAc7QR-G2m89f-GbQ@mail.gmail.com>
On 11/6/24 10:36, Peter Maydell wrote:
> On Tue, 11 Jun 2024 at 09:25, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>>
>> Hi Peter,
>>
>> On 3/6/24 18:09, Peter Maydell wrote:
>>> Now that all targets set TCGCPUOps::cpu_exec_halt, we can make it
>>> mandatory and remove the fallback handling that calls cpu_has_work.
>>>
>>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>>> ---
>>> include/hw/core/tcg-cpu-ops.h | 9 ++++++---
>>> accel/tcg/cpu-exec.c | 7 +------
>>> 2 files changed, 7 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/include/hw/core/tcg-cpu-ops.h b/include/hw/core/tcg-cpu-ops.h
>>> index 099de3375e3..34318cf0e60 100644
>>> --- a/include/hw/core/tcg-cpu-ops.h
>>> +++ b/include/hw/core/tcg-cpu-ops.h
>>> @@ -122,10 +122,13 @@ struct TCGCPUOps {
>>> * to do when the CPU is in the halted state.
>>> *
>>> * Return true to indicate that the CPU should now leave halt, false
>>> - * if it should remain in the halted state.
>>> + * if it should remain in the halted state. (This should generally
>>> + * be the same value that cpu_has_work() would return.)
>>> *
>>> - * If this method is not provided, the default is to do nothing, and
>>> - * to leave halt if cpu_has_work() returns true.
>>> + * This method must be provided. If the target does not need to
>>> + * do anything special for halt, the same function used for its
>>> + * CPUClass::has_work method can be used here, as they have the
>>> + * same function signature.
>>> */
>>> bool (*cpu_exec_halt)(CPUState *cpu);
>>> /**
>>> diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
>>> index 6711b58e0b2..8be4d2a1330 100644
>>> --- a/accel/tcg/cpu-exec.c
>>> +++ b/accel/tcg/cpu-exec.c
>>> @@ -682,13 +682,8 @@ static inline bool cpu_handle_halt(CPUState *cpu)
>>> #ifndef CONFIG_USER_ONLY
>>> if (cpu->halted) {
>>> const TCGCPUOps *tcg_ops = cpu->cc->tcg_ops;
>>> - bool leave_halt;
>>> + bool leave_halt = tcg_ops->cpu_exec_halt(cpu);
>>>
>>> - if (tcg_ops->cpu_exec_halt) {
>>> - leave_halt = tcg_ops->cpu_exec_halt(cpu);
>>> - } else {
>>> - leave_halt = cpu_has_work(cpu);
>>> - }
>>> if (!leave_halt) {
>>> return true;
>>> }
>>
>> Could we assert the handler is assigned in tcg_exec_realizefn()?
>
> Yeah, we could. I thought about an assert that it was set up,
> but couldn't identify a place to do that.
>
>> If you agree I could squash these 3 lines:
>>
>> -- >8 --
>> --- a/accel/tcg/cpu-exec.c
>> +++ b/accel/tcg/cpu-exec.c
>> @@ -1077,6 +1077,10 @@ bool tcg_exec_realizefn(CPUState *cpu, Error **errp)
>> static bool tcg_target_initialized;
>>
>> if (!tcg_target_initialized) {
>> + /* Check mandatory TCGCPUOps handlers */
>> + assert(cpu->cc->tcg_ops->initialize);
>> + assert(cpu->cc->tcg_ops->cpu_exec_halt);
>> +
>> cpu->cc->tcg_ops->initialize();
>
> I don't think we need to assert initialize if we're about to call
> it anyway -- the call will crash if it's NULL in an easy to diagnose way.
Pro of assert: obvious error message on stderr.
Con of crash: we need to use a debugger to figure out the NULL deref.
Anyway, series queued without the "assert(initialize)" squashed,
Thanks!
>> tcg_target_initialized = true;
>> }
>> ---
>>
>> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>
> thanks
> -- PMM
next prev parent reply other threads:[~2024-06-11 9:59 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-03 16:09 [PATCH 0/3] cpu_exec_halt: make method mandatory Peter Maydell
2024-06-03 16:09 ` [PATCH 1/3] target/arm: Set arm_v7m_tcg_ops cpu_exec_halt to arm_cpu_exec_halt() Peter Maydell
2024-06-11 8:26 ` Philippe Mathieu-Daudé
2024-06-03 16:09 ` [PATCH 2/3] target: Set TCGCPUOps::cpu_exec_halt to target's has_work implementation Peter Maydell
2024-06-11 8:17 ` Philippe Mathieu-Daudé
2024-06-03 16:09 ` [PATCH 3/3] accel/tcg: Make TCGCPUOps::cpu_exec_halt mandatory Peter Maydell
2024-06-11 8:25 ` Philippe Mathieu-Daudé
2024-06-11 8:36 ` Peter Maydell
2024-06-11 9:58 ` Philippe Mathieu-Daudé [this message]
2024-06-04 1:03 ` [PATCH 0/3] cpu_exec_halt: make method mandatory 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=2cfbd01f-c5c3-44d7-b222-82ce378273d5@linaro.org \
--to=philmd@linaro.org \
--cc=peter.maydell@linaro.org \
--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).