diff options
Diffstat (limited to 'drivers/xen')
-rw-r--r-- | drivers/xen/manage.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index 3ccd348d112d..0d61db1e7b49 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c | |||
@@ -39,12 +39,6 @@ static int xen_suspend(void *data) | |||
39 | 39 | ||
40 | BUG_ON(!irqs_disabled()); | 40 | BUG_ON(!irqs_disabled()); |
41 | 41 | ||
42 | err = device_power_down(PMSG_SUSPEND); | ||
43 | if (err) { | ||
44 | printk(KERN_ERR "xen_suspend: device_power_down failed: %d\n", | ||
45 | err); | ||
46 | return err; | ||
47 | } | ||
48 | err = sysdev_suspend(PMSG_SUSPEND); | 42 | err = sysdev_suspend(PMSG_SUSPEND); |
49 | if (err) { | 43 | if (err) { |
50 | printk(KERN_ERR "xen_suspend: sysdev_suspend failed: %d\n", | 44 | printk(KERN_ERR "xen_suspend: sysdev_suspend failed: %d\n", |
@@ -69,7 +63,6 @@ static int xen_suspend(void *data) | |||
69 | xen_mm_unpin_all(); | 63 | xen_mm_unpin_all(); |
70 | 64 | ||
71 | sysdev_resume(); | 65 | sysdev_resume(); |
72 | device_power_up(PMSG_RESUME); | ||
73 | 66 | ||
74 | if (!*cancelled) { | 67 | if (!*cancelled) { |
75 | xen_irq_resume(); | 68 | xen_irq_resume(); |
@@ -108,6 +101,12 @@ static void do_suspend(void) | |||
108 | /* XXX use normal device tree? */ | 101 | /* XXX use normal device tree? */ |
109 | xenbus_suspend(); | 102 | xenbus_suspend(); |
110 | 103 | ||
104 | err = device_power_down(PMSG_SUSPEND); | ||
105 | if (err) { | ||
106 | printk(KERN_ERR "device_power_down failed: %d\n", err); | ||
107 | goto resume_devices; | ||
108 | } | ||
109 | |||
111 | err = stop_machine(xen_suspend, &cancelled, cpumask_of(0)); | 110 | err = stop_machine(xen_suspend, &cancelled, cpumask_of(0)); |
112 | if (err) { | 111 | if (err) { |
113 | printk(KERN_ERR "failed to start xen_suspend: %d\n", err); | 112 | printk(KERN_ERR "failed to start xen_suspend: %d\n", err); |
@@ -120,6 +119,9 @@ static void do_suspend(void) | |||
120 | } else | 119 | } else |
121 | xenbus_suspend_cancel(); | 120 | xenbus_suspend_cancel(); |
122 | 121 | ||
122 | device_power_up(PMSG_RESUME); | ||
123 | |||
124 | resume_devices: | ||
123 | device_resume(PMSG_RESUME); | 125 | device_resume(PMSG_RESUME); |
124 | 126 | ||
125 | /* Make sure timer events get retriggered on all CPUs */ | 127 | /* Make sure timer events get retriggered on all CPUs */ |