From: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
To: Julien Grall <julien@xen.org>
Cc: "dmitry.semenets@gmail.com" <dmitry.semenets@gmail.com>,
Dmytro Semenets <Dmytro_Semenets@epam.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Bertrand Marquis <bertrand.marquis@arm.com>,
"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH] xen: Don't call panic if ARM TF cpu off returns DENIED
Date: Thu, 16 Jun 2022 18:40:48 +0000 [thread overview]
Message-ID: <87wndgh2og.fsf@epam.com> (raw)
In-Reply-To: <cf7660da-0bde-865e-7c22-a2e21e31fae5@xen.org>
Hi Julien,
Julien Grall <julien@xen.org> writes:
> Hi,
>
> On 16/06/2022 14:55, dmitry.semenets@gmail.com wrote:
>> From: Dmytro Semenets <dmytro_semenets@epam.com>
>> According to PSCI specification ARM TF can return DENIED on CPU OFF.
>
> I am confused. The spec is talking about Trusted OS and not
> firmware. The docummentation is also not specific to ARM Trusted
> Firmware. So did you mean "Trusted OS"?
It should be "firmware", I believe.
>
> Also, did you reproduce on HW? If so, on which CPU this will fail?
>
Yes, we reproduced this on HW. In our case it failed on CPU0. To be
fair, in our case it had nothing to do with Trusted OS. It is just
platform limitation - it can't turn off CPU0. But from Xen perspective
there is no difference - CPU_OFF call returns DENIED.
>> This patch brings the hypervisor into compliance with the PSCI
>> specification.
>
> Now it means CPU off will never be turned off using PSCI. Instead, we
> would end up to spin in Xen. This would be a problem because we could
> save less power.
Agreed.
>
>> Refer to "Arm Power State Coordination Interface (DEN0022D.b)"
>> section 5.5.2
>
> Reading both 5.5.2 and 5.9.1 together, DENIED would be returned when
> the trusted OS can only run on one core.
>
> Some of the trusted OS are migratable. So I think we should first
> attempt to migrate the CPU. Then if it doesn't work, we should prevent
> the CPU to go offline.
>
> That said, upstream doesn't support cpu offlining (I don't know for
> your use case). In case of shutdown, it is not necessary to offline
> the CPU, so we could avoid to call CPU_OFF on all CPUs but
> one. Something like:
>
This is even better approach yes. But you mentioned CPU_OFF. Did you
mean SYSTEM_RESET?
> diff --git a/xen/arch/arm/shutdown.c b/xen/arch/arm/shutdown.c
> index 3dc6819d56de..d956812ef8f4 100644
> --- a/xen/arch/arm/shutdown.c
> +++ b/xen/arch/arm/shutdown.c
> @@ -8,7 +8,9 @@
>
> static void noreturn halt_this_cpu(void *arg)
> {
> - stop_cpu();
> + ASSERT(!local_irq_enable());
> + while ( 1 )
> + wfi();
> }
>
> void machine_halt(void)
> @@ -21,10 +23,6 @@ void machine_halt(void)
> smp_call_function(halt_this_cpu, NULL, 0);
> local_irq_disable();
>
> - /* Wait at most another 10ms for all other CPUs to go offline. */
> - while ( (num_online_cpus() > 1) && (timeout-- > 0) )
> - mdelay(1);
> -
> /* This is mainly for PSCI-0.2, which does not return if success. */
> call_psci_system_off();
>
>> Signed-off-by: Dmytro Semenets <dmytro_semenets@epam.com>
>> Reviewed-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
>
> I don't recall to see patch on the ML recently for this. So is this an
> internal review?
Yeah, sorry about that. Dmytro is a new member in our team and he is not
yet familiar with differences in internal reviews and reviews in ML.
If you are interested, we had internal review at [1]:
[1] https://github.com/xen-troops/xen/pull/184
>
>> ---
>> xen/arch/arm/psci.c | 5 +++--
>> 1 file changed, 3 insertions(+), 2 deletions(-)
>> diff --git a/xen/arch/arm/psci.c b/xen/arch/arm/psci.c
>> index 0c90c2305c..55787fde58 100644
>> --- a/xen/arch/arm/psci.c
>> +++ b/xen/arch/arm/psci.c
>> @@ -63,8 +63,9 @@ void call_psci_cpu_off(void)
>> /* If successfull the PSCI cpu_off call doesn't return
>> */
>> arm_smccc_smc(PSCI_0_2_FN32_CPU_OFF, &res);
>> - panic("PSCI cpu off failed for CPU%d err=%d\n", smp_processor_id(),
>> - PSCI_RET(res));
>> + if ( PSCI_RET(res) != PSCI_DENIED )
>> + panic("PSCI cpu off failed for CPU%d err=%d\n", smp_processor_id(),
>> + PSCI_RET(res));
>> }
>> }
>>
>
> Cheers,
--
Volodymyr Babchuk at EPAM
next prev parent reply other threads:[~2022-06-16 18:41 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-16 13:55 [PATCH] xen: Don't call panic if ARM TF cpu off returns DENIED dmitry.semenets
2022-06-16 15:12 ` Julien Grall
2022-06-16 18:40 ` Volodymyr Babchuk [this message]
2022-06-16 19:09 ` Julien Grall
2022-06-16 19:32 ` Dmytro Semenets
2022-06-17 9:10 ` Volodymyr Babchuk
2022-06-17 11:12 ` Julien Grall
2022-06-18 17:43 ` Dmytro Semenets
2022-06-19 9:04 ` Julien Grall
2022-06-21 8:55 ` Dmytro Semenets
2022-06-21 9:51 ` Julien Grall
2022-06-21 10:05 ` Dmytro Semenets
2022-06-21 10:45 ` Julien Grall
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=87wndgh2og.fsf@epam.com \
--to=volodymyr_babchuk@epam.com \
--cc=Dmytro_Semenets@epam.com \
--cc=bertrand.marquis@arm.com \
--cc=dmitry.semenets@gmail.com \
--cc=julien@xen.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.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.