summaryrefslogtreecommitdiffstats
path: root/sys/dev/xen/control/control.c
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2017-04-12 06:24:35 +0000
committerdelphij <delphij@FreeBSD.org>2017-04-12 06:24:35 +0000
commitb8126de23e957978b4d0403097cd8402f0c1d82a (patch)
treef1de81f49e9bed94c537e2b96701aa1180fa111c /sys/dev/xen/control/control.c
parent8ec5a888ff17420a447fce1d15a0413c122dd297 (diff)
downloadFreeBSD-src-b8126de23e957978b4d0403097cd8402f0c1d82a.zip
FreeBSD-src-b8126de23e957978b4d0403097cd8402f0c1d82a.tar.gz
Fix multiple vulnerabilities of ntp. [SA-17:03]
Xen migration enhancements. [EN-17:05] Approved by: so
Diffstat (limited to 'sys/dev/xen/control/control.c')
-rw-r--r--sys/dev/xen/control/control.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/sys/dev/xen/control/control.c b/sys/dev/xen/control/control.c
index 60e448a..b8d41ba 100644
--- a/sys/dev/xen/control/control.c
+++ b/sys/dev/xen/control/control.c
@@ -151,6 +151,7 @@ __FBSDID("$FreeBSD$");
#include <machine/xen/xenvar.h>
#include <machine/xen/xenfunc.h>
+bool xen_suspend_cancelled;
/*--------------------------- Forward Declarations --------------------------*/
/** Function signature for shutdown event handlers. */
typedef void (xctrl_shutdown_handler_t)(void);
@@ -341,8 +342,11 @@ xctrl_suspend()
#ifdef SMP
cpuset_t cpu_suspend_map;
#endif
- int suspend_cancelled;
+ EVENTHANDLER_INVOKE(power_suspend_early);
+ xs_lock();
+ stop_all_proc();
+ xs_unlock();
EVENTHANDLER_INVOKE(power_suspend);
if (smp_started) {
@@ -392,16 +396,20 @@ xctrl_suspend()
intr_suspend();
xen_hvm_suspend();
- suspend_cancelled = HYPERVISOR_suspend(0);
+ xen_suspend_cancelled = !!HYPERVISOR_suspend(0);
- xen_hvm_resume(suspend_cancelled != 0);
- intr_resume(suspend_cancelled != 0);
+ if (!xen_suspend_cancelled) {
+ xen_hvm_resume(false);
+ }
+ intr_resume(xen_suspend_cancelled != 0);
enable_intr();
/*
* Reset grant table info.
*/
- gnttab_resume();
+ if (!xen_suspend_cancelled) {
+ gnttab_resume();
+ }
#ifdef SMP
/* Send an IPI_BITMAP in case there are pending bitmap IPIs. */
@@ -429,6 +437,8 @@ xctrl_suspend()
thread_unlock(curthread);
}
+ resume_all_proc();
+
EVENTHANDLER_INVOKE(power_resume);
if (bootverbose)
OpenPOWER on IntegriCloud