|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 08/18] xen/arm: Disable/enable non-boot physical CPUs on suspend/resume
On Mon, 12 Nov 2018, Mirela Simonovic wrote:
> Non-boot CPUs have to be disabled on suspend and enabled on resume
> (hotplug-based mechanism). Disabling non-boot CPUs will lead to PSCI
> CPU_OFF to be called by each non-boot CPU. Depending on the underlying
> platform capabilities, this may lead to the physical powering down of
> CPUs. Tested on Xilinx Zynq Ultrascale+ MPSoC (including power down of
> each non-boot CPU).
>
> Signed-off-by: Mirela Simonovic <mirela.simonovic@xxxxxxxxxx>
> Signed-off-by: Saeed Nowshadi <saeed.nowshadi@xxxxxxxxxx>
> ---
> xen/arch/arm/suspend.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/xen/arch/arm/suspend.c b/xen/arch/arm/suspend.c
> index 575afd5eb8..dae1b1f7d6 100644
> --- a/xen/arch/arm/suspend.c
> +++ b/xen/arch/arm/suspend.c
> @@ -1,4 +1,5 @@
> #include <xen/sched.h>
> +#include <xen/cpu.h>
> #include <asm/cpufeature.h>
> #include <asm/event.h>
> #include <asm/psci.h>
> @@ -115,17 +116,29 @@ static void vcpu_suspend(register_t epoint, register_t
> cid)
> /* Xen suspend. Note: data is not used (suspend is the suspend to RAM) */
> static long system_suspend(void *data)
> {
> + int status;
> +
> BUG_ON(system_state != SYS_STATE_active);
>
> system_state = SYS_STATE_suspend;
> freeze_domains();
>
> + status = disable_nonboot_cpus();
> + if ( status )
> + {
> + system_state = SYS_STATE_resume;
> + goto resume_nonboot_cpus;
> + }
> +
> system_state = SYS_STATE_resume;
>
> +resume_nonboot_cpus:
> + enable_nonboot_cpus();
> thaw_domains();
> system_state = SYS_STATE_active;
> + dsb(sy);
>
> - return -ENOSYS;
> + return status;
> }
I think we need a spin_lock to protect system_suspend from concurrent
calls, or (better) we need to make sure that the caller is only allowed
to call system_suspend if there is just one vcpu active in the system,
and that vcpu is blocked on this PSCI system suspend call.
> int32_t domain_suspend(register_t epoint, register_t cid)
> --
> 2.13.0
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |