From: Frederic Barrat <fbarrat@linux.ibm.com>
To: "Cédric Le Goater" <clg@kaod.org>,
danielhb413@gmail.com, qemu-ppc@nongnu.org,
qemu-devel@nongnu.org
Subject: Re: [PATCH] target/ppc: cpu_init: Clean up stop state on cpu reset
Date: Wed, 15 Jun 2022 09:17:40 +0200 [thread overview]
Message-ID: <3da1094b-b200-49ad-3a7c-dae31a7e7658@linux.ibm.com> (raw)
In-Reply-To: <64d1330c-1996-622c-fc1a-ed81fd56cdda@kaod.org>
On 15/06/2022 07:23, Cédric Le Goater wrote:
> On 6/14/22 10:29, Frederic Barrat wrote:
>> The 'resume_as_sreset' attribute of a cpu can be set when a thread is
>> entering a stop state on ppc books. It causes the thread to be
>> re-routed to vector 0x100 when woken up by an exception. So it must be
>> cleaned on reset or a thread might be re-routed unexpectedly after a
>> reset, when it was not in a stop state and/or when the appropriate
>> exception handler isn't set up yet.
>
> What is the test scenario ? and what are the symptoms ?
I was hitting it because of another bug in skiboot: if you have many
chips, we spend way too much time in add_opal_interrupts(), especially
on powernv10 (I'm working on a separate patch in skiboot to fix that).
Sufficiently so that the watchdog timer resets the system. When it
happens, all the secondary threads are in stopped state, only the main
thread is working. That's how I was reproducing.
What happens after the reset can vary a bit due to timing, but the most
likely scenario is that we go through another primary thread election in
skiboot. If the primary thread is the same as before, then there's no
problem. If it's a different primary, then it will enter
main_cpu_entry() while the other threads wait as secondaries. At some
point, the primary thread (which still carries the wrong
resume_as_sreset value from before reset) will enable the decrementer
interrupt. The vector for the decrementer exception 0x900 is defined, so
that shouldn't be a problem. However, because of the wrong
resume_as_sreset value, it is re-routed to vector 0x100, which is still
defined as the default boot-time handler, which is the entry point for
BML. So the thread restarts as new, but this time it will be elected
secondary. And we end up with all threads waiting as secondaries and a
system stuck. All that happen before we've init the uart, so there's not
a single trace on the console. Fun :-)
Fred
>
>
>> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
>
> Reviewed-by: Cédric Le Goater <clg@kaod.org>
>
>
>> ---
>>
>> I didn't find an appropriate commit to add a "Fixes:". It originates
>> when adding support for power management states but the code looked
>> quite different in 2016 and it's not clear whether we were supporting
>> reset then.
>
> It was added when we needed some support for the POWER8 stop states.
> About that time.
>
> Thanks,
>
> C.
>
>>
>> target/ppc/cpu_init.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
>> index 0f891afa04..c16cb8dbe7 100644
>> --- a/target/ppc/cpu_init.c
>> +++ b/target/ppc/cpu_init.c
>> @@ -7186,6 +7186,9 @@ static void ppc_cpu_reset(DeviceState *dev)
>> }
>> pmu_update_summaries(env);
>> }
>> +
>> + /* clean any pending stop state */
>> + env->resume_as_sreset = 0;
>> #endif
>> hreg_compute_hflags(env);
>> env->reserve_addr = (target_ulong)-1ULL;
>
>
next prev parent reply other threads:[~2022-06-15 7:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-14 8:29 [PATCH] target/ppc: cpu_init: Clean up stop state on cpu reset Frederic Barrat
2022-06-14 12:44 ` Fabiano Rosas
2022-06-15 5:23 ` Cédric Le Goater
2022-06-15 7:17 ` Frederic Barrat [this message]
2022-06-15 9:40 ` Cédric Le Goater
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=3da1094b-b200-49ad-3a7c-dae31a7e7658@linux.ibm.com \
--to=fbarrat@linux.ibm.com \
--cc=clg@kaod.org \
--cc=danielhb413@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@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 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).