[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 1/4] xen: disable non-boot VCPUs during suspend



From: David Vrabel <david.vrabel@xxxxxxxxxx>

syscore_suspend() and syscore_resume() expect there to be only one
online CPU.  e.g., hrtimers_resume() only triggers events for the
current CPU.  Xen's suspend path was leaving all VCPUs online and then
attempting to fixup problems afterwards (e.g., with an explicit call
to clock_was_set() to trigger pending high resolution timers).

Instead, disable non-boot CPUs before calling stop_machine() and
reenable them afterwards.

This is then similar to what the kexec code does before and after a
kexec jump (see kernel_kexec() in kernel/kexec.c).

Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
---
 drivers/xen/manage.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
index 412b96c..596e55a 100644
--- a/drivers/xen/manage.c
+++ b/drivers/xen/manage.c
@@ -148,8 +148,19 @@ static void do_suspend(void)
                si.post = &xen_post_suspend;
        }
 
+       /*
+        * syscore_suspend() and syscore_resume() called in
+        * xen_suspend() above, assume that only the boot CPU is
+        * online.
+        */
+       err = disable_nonboot_cpus();
+       if (err)
+               goto out_resume;
+
        err = stop_machine(xen_suspend, &si, cpumask_of(0));
 
+       enable_nonboot_cpus();
+
        dpm_resume_start(si.cancelled ? PMSG_THAW : PMSG_RESTORE);
 
        if (err) {
@@ -166,9 +177,6 @@ out_resume:
 
        dpm_resume_end(si.cancelled ? PMSG_THAW : PMSG_RESTORE);
 
-       /* Make sure timer events get retriggered on all CPUs */
-       clock_was_set();
-
 out_thaw:
 #ifdef CONFIG_PREEMPT
        thaw_processes();
-- 
1.7.2.5


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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