diff options
Diffstat (limited to 'kernel/power/disk.c')
-rw-r--r-- | kernel/power/disk.c | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index e71ca9cd81b2..5cb080e7eebd 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c | |||
@@ -215,8 +215,6 @@ static int create_image(int platform_mode) | |||
215 | if (error) | 215 | if (error) |
216 | return error; | 216 | return error; |
217 | 217 | ||
218 | device_pm_lock(); | ||
219 | |||
220 | /* At this point, device_suspend() has been called, but *not* | 218 | /* At this point, device_suspend() has been called, but *not* |
221 | * device_power_down(). We *must* call device_power_down() now. | 219 | * device_power_down(). We *must* call device_power_down() now. |
222 | * Otherwise, drivers for some devices (e.g. interrupt controllers) | 220 | * Otherwise, drivers for some devices (e.g. interrupt controllers) |
@@ -227,7 +225,7 @@ static int create_image(int platform_mode) | |||
227 | if (error) { | 225 | if (error) { |
228 | printk(KERN_ERR "PM: Some devices failed to power down, " | 226 | printk(KERN_ERR "PM: Some devices failed to power down, " |
229 | "aborting hibernation\n"); | 227 | "aborting hibernation\n"); |
230 | goto Unlock; | 228 | return error; |
231 | } | 229 | } |
232 | 230 | ||
233 | error = platform_pre_snapshot(platform_mode); | 231 | error = platform_pre_snapshot(platform_mode); |
@@ -241,9 +239,9 @@ static int create_image(int platform_mode) | |||
241 | 239 | ||
242 | local_irq_disable(); | 240 | local_irq_disable(); |
243 | 241 | ||
244 | sysdev_suspend(PMSG_FREEZE); | 242 | error = sysdev_suspend(PMSG_FREEZE); |
245 | if (error) { | 243 | if (error) { |
246 | printk(KERN_ERR "PM: Some devices failed to power down, " | 244 | printk(KERN_ERR "PM: Some system devices failed to power down, " |
247 | "aborting hibernation\n"); | 245 | "aborting hibernation\n"); |
248 | goto Enable_irqs; | 246 | goto Enable_irqs; |
249 | } | 247 | } |
@@ -280,9 +278,6 @@ static int create_image(int platform_mode) | |||
280 | device_power_up(in_suspend ? | 278 | device_power_up(in_suspend ? |
281 | (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); | 279 | (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); |
282 | 280 | ||
283 | Unlock: | ||
284 | device_pm_unlock(); | ||
285 | |||
286 | return error; | 281 | return error; |
287 | } | 282 | } |
288 | 283 | ||
@@ -344,13 +339,11 @@ static int resume_target_kernel(bool platform_mode) | |||
344 | { | 339 | { |
345 | int error; | 340 | int error; |
346 | 341 | ||
347 | device_pm_lock(); | ||
348 | |||
349 | error = device_power_down(PMSG_QUIESCE); | 342 | error = device_power_down(PMSG_QUIESCE); |
350 | if (error) { | 343 | if (error) { |
351 | printk(KERN_ERR "PM: Some devices failed to power down, " | 344 | printk(KERN_ERR "PM: Some devices failed to power down, " |
352 | "aborting resume\n"); | 345 | "aborting resume\n"); |
353 | goto Unlock; | 346 | return error; |
354 | } | 347 | } |
355 | 348 | ||
356 | error = platform_pre_restore(platform_mode); | 349 | error = platform_pre_restore(platform_mode); |
@@ -403,9 +396,6 @@ static int resume_target_kernel(bool platform_mode) | |||
403 | 396 | ||
404 | device_power_up(PMSG_RECOVER); | 397 | device_power_up(PMSG_RECOVER); |
405 | 398 | ||
406 | Unlock: | ||
407 | device_pm_unlock(); | ||
408 | |||
409 | return error; | 399 | return error; |
410 | } | 400 | } |
411 | 401 | ||
@@ -464,11 +454,9 @@ int hibernation_platform_enter(void) | |||
464 | goto Resume_devices; | 454 | goto Resume_devices; |
465 | } | 455 | } |
466 | 456 | ||
467 | device_pm_lock(); | ||
468 | |||
469 | error = device_power_down(PMSG_HIBERNATE); | 457 | error = device_power_down(PMSG_HIBERNATE); |
470 | if (error) | 458 | if (error) |
471 | goto Unlock; | 459 | goto Resume_devices; |
472 | 460 | ||
473 | error = hibernation_ops->prepare(); | 461 | error = hibernation_ops->prepare(); |
474 | if (error) | 462 | if (error) |
@@ -493,9 +481,6 @@ int hibernation_platform_enter(void) | |||
493 | 481 | ||
494 | device_power_up(PMSG_RESTORE); | 482 | device_power_up(PMSG_RESTORE); |
495 | 483 | ||
496 | Unlock: | ||
497 | device_pm_unlock(); | ||
498 | |||
499 | Resume_devices: | 484 | Resume_devices: |
500 | entering_platform_hibernation = false; | 485 | entering_platform_hibernation = false; |
501 | device_resume(PMSG_RESTORE); | 486 | device_resume(PMSG_RESTORE); |