summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorroyger <royger@FreeBSD.org>2014-06-16 08:46:31 +0000
committerroyger <royger@FreeBSD.org>2014-06-16 08:46:31 +0000
commitd5f09830c231760d1558bbea709526dddce2438f (patch)
tree9f871403141eedab16a0591ab20617d287ecdd72 /sys
parentea13728e4a5c195669c2cb218ec411af3ace3810 (diff)
downloadFreeBSD-src-d5f09830c231760d1558bbea709526dddce2438f.zip
FreeBSD-src-d5f09830c231760d1558bbea709526dddce2438f.tar.gz
xen: add shutdown hook for PVH
Add the PV shutdown hook to PVH. Sponsored by: Citrix Systems R&D Approved by: gibbs dev/xen/control/control.c: - Make xen_pv_shutdown_final available on XENHVM builds. - Register the Xen PV shutdown hook for PVH guests.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/xen/control/control.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/sys/dev/xen/control/control.c b/sys/dev/xen/control/control.c
index bc0609d..78894ba 100644
--- a/sys/dev/xen/control/control.c
+++ b/sys/dev/xen/control/control.c
@@ -316,21 +316,6 @@ xctrl_suspend()
EVENTHANDLER_INVOKE(power_resume);
}
-static void
-xen_pv_shutdown_final(void *arg, int howto)
-{
- /*
- * Inform the hypervisor that shutdown is complete.
- * This is not necessary in HVM domains since Xen
- * emulates ACPI in that mode and FreeBSD's ACPI
- * support will request this transition.
- */
- if (howto & (RB_HALT | RB_POWEROFF))
- HYPERVISOR_shutdown(SHUTDOWN_poweroff);
- else
- HYPERVISOR_shutdown(SHUTDOWN_reboot);
-}
-
#else
/* HVM mode suspension. */
@@ -440,6 +425,21 @@ xctrl_crash()
panic("Xen directed crash");
}
+static void
+xen_pv_shutdown_final(void *arg, int howto)
+{
+ /*
+ * Inform the hypervisor that shutdown is complete.
+ * This is not necessary in HVM domains since Xen
+ * emulates ACPI in that mode and FreeBSD's ACPI
+ * support will request this transition.
+ */
+ if (howto & (RB_HALT | RB_POWEROFF))
+ HYPERVISOR_shutdown(SHUTDOWN_poweroff);
+ else
+ HYPERVISOR_shutdown(SHUTDOWN_reboot);
+}
+
/*------------------------------ Event Reception -----------------------------*/
static void
xctrl_on_watch_event(struct xs_watch *watch, const char **vec, unsigned int len)
@@ -522,10 +522,9 @@ xctrl_attach(device_t dev)
xctrl->xctrl_watch.callback_data = (uintptr_t)xctrl;
xs_register_watch(&xctrl->xctrl_watch);
-#ifndef XENHVM
- EVENTHANDLER_REGISTER(shutdown_final, xen_pv_shutdown_final, NULL,
- SHUTDOWN_PRI_LAST);
-#endif
+ if (xen_pv_domain())
+ EVENTHANDLER_REGISTER(shutdown_final, xen_pv_shutdown_final, NULL,
+ SHUTDOWN_PRI_LAST);
return (0);
}
OpenPOWER on IntegriCloud