[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.