diff options
Diffstat (limited to 'kernel/power/main.c')
-rw-r--r-- | kernel/power/main.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/kernel/power/main.c b/kernel/power/main.c index c9632f841f64..f0a466736c01 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c | |||
@@ -287,17 +287,19 @@ void __attribute__ ((weak)) arch_suspend_enable_irqs(void) | |||
287 | */ | 287 | */ |
288 | static int suspend_enter(suspend_state_t state) | 288 | static int suspend_enter(suspend_state_t state) |
289 | { | 289 | { |
290 | int error = 0; | 290 | int error; |
291 | 291 | ||
292 | device_pm_lock(); | 292 | device_pm_lock(); |
293 | arch_suspend_disable_irqs(); | ||
294 | BUG_ON(!irqs_disabled()); | ||
295 | 293 | ||
296 | if ((error = device_power_down(PMSG_SUSPEND))) { | 294 | error = device_power_down(PMSG_SUSPEND); |
295 | if (error) { | ||
297 | printk(KERN_ERR "PM: Some devices failed to power down\n"); | 296 | printk(KERN_ERR "PM: Some devices failed to power down\n"); |
298 | goto Done; | 297 | goto Done; |
299 | } | 298 | } |
300 | 299 | ||
300 | arch_suspend_disable_irqs(); | ||
301 | BUG_ON(!irqs_disabled()); | ||
302 | |||
301 | error = sysdev_suspend(PMSG_SUSPEND); | 303 | error = sysdev_suspend(PMSG_SUSPEND); |
302 | if (!error) { | 304 | if (!error) { |
303 | if (!suspend_test(TEST_CORE)) | 305 | if (!suspend_test(TEST_CORE)) |
@@ -305,11 +307,14 @@ static int suspend_enter(suspend_state_t state) | |||
305 | sysdev_resume(); | 307 | sysdev_resume(); |
306 | } | 308 | } |
307 | 309 | ||
308 | device_power_up(PMSG_RESUME); | ||
309 | Done: | ||
310 | arch_suspend_enable_irqs(); | 310 | arch_suspend_enable_irqs(); |
311 | BUG_ON(irqs_disabled()); | 311 | BUG_ON(irqs_disabled()); |
312 | |||
313 | device_power_up(PMSG_RESUME); | ||
314 | |||
315 | Done: | ||
312 | device_pm_unlock(); | 316 | device_pm_unlock(); |
317 | |||
313 | return error; | 318 | return error; |
314 | } | 319 | } |
315 | 320 | ||