|
@@ -78,11 +78,25 @@ static inline int xen_acpi_get_pxm(acpi_handle h)
|
|
|
int xen_acpi_notify_hypervisor_state(u8 sleep_state,
|
|
|
u32 pm1a_cnt, u32 pm1b_cnd);
|
|
|
|
|
|
+static inline int xen_acpi_suspend_lowlevel(void)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * Xen will save and restore CPU context, so
|
|
|
+ * we can skip that and just go straight to
|
|
|
+ * the suspend.
|
|
|
+ */
|
|
|
+ acpi_enter_sleep_state(ACPI_STATE_S3);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static inline void xen_acpi_sleep_register(void)
|
|
|
{
|
|
|
- if (xen_initial_domain())
|
|
|
+ if (xen_initial_domain()) {
|
|
|
acpi_os_set_prepare_sleep(
|
|
|
&xen_acpi_notify_hypervisor_state);
|
|
|
+
|
|
|
+ acpi_suspend_lowlevel = xen_acpi_suspend_lowlevel;
|
|
|
+ }
|
|
|
}
|
|
|
#else
|
|
|
static inline void xen_acpi_sleep_register(void)
|