[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
Hi Mirela, On 14/11/2018 13:00, Mirela Simonovic wrote: On 11/14/2018 11:52 AM, Julien Grall wrote:Hi Mirela, On 12/11/2018 11:30, 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);Why do you need a dsb(sy) here?Updated value of system_state variable needs to be visible to other CPUs before we move on We tend to write the reason on top of barrier why they are necessary. But I am still unsure to understand why this is important. What would happen if move on without it? - return -ENOSYS;Why do you return -ENOSYS until this patch? Should not have it be 0?To distinguish that Xen suspend wasn't supported until we at least do something useful in suspend procedure. This is not so important, we can return 0 but needs to be fixed in previous patches. If you return 0 before hand you can more easily bisect this series and know where it suspend/resume breaks. Cheers, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |