/* Ignore multiple shutdown requests. */
static enum shutdown_state shutting_down = SHUTDOWN_INVALID;
+#ifdef CONFIG_PM_SLEEP
static int xen_suspend(void *data)
{
int *cancelled = data;
gnttab_resume();
xen_mm_unpin_all();
- device_power_up();
+ device_power_up(PMSG_RESUME);
if (!*cancelled) {
xen_irq_resume();
xen_console_resume();
+ xen_timer_resume();
}
return 0;
goto out;
}
- if (!cancelled)
+ if (!cancelled) {
+ xen_arch_resume();
xenbus_resume();
- else
+ } else
xenbus_suspend_cancel();
- device_resume();
+ device_resume(PMSG_RESUME);
/* Make sure timer events get retriggered on all CPUs */
clock_was_set();
#endif
shutting_down = SHUTDOWN_INVALID;
}
+#endif /* CONFIG_PM_SLEEP */
static void shutdown_handler(struct xenbus_watch *watch,
const char **vec, unsigned int len)