diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 06:06:36 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 06:06:36 -0400 |
commit | a18f22a968de17b29f2310cdb7ba69163e65ec15 (patch) | |
tree | a7d56d88fad5e444d7661484109758a2f436129e /kernel/power/hibernate.c | |
parent | a1c57e0fec53defe745e64417eacdbd3618c3e66 (diff) | |
parent | 798778b8653f64b7b2162ac70eca10367cff6ce8 (diff) |
Merge branch 'consolidate-clksrc-i8253' of master.kernel.org:~rmk/linux-2.6-arm into timers/clocksource
Conflicts:
arch/ia64/kernel/cyclone.c
arch/mips/kernel/i8253.c
arch/x86/kernel/i8253.c
Reason: Resolve conflicts so further cleanups do not conflict further
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/power/hibernate.c')
-rw-r--r-- | kernel/power/hibernate.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 1832bd264219..50aae660174d 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/cpu.h> | 23 | #include <linux/cpu.h> |
24 | #include <linux/freezer.h> | 24 | #include <linux/freezer.h> |
25 | #include <linux/gfp.h> | 25 | #include <linux/gfp.h> |
26 | #include <linux/syscore_ops.h> | ||
26 | #include <scsi/scsi_scan.h> | 27 | #include <scsi/scsi_scan.h> |
27 | #include <asm/suspend.h> | 28 | #include <asm/suspend.h> |
28 | 29 | ||
@@ -272,6 +273,11 @@ static int create_image(int platform_mode) | |||
272 | local_irq_disable(); | 273 | local_irq_disable(); |
273 | 274 | ||
274 | error = sysdev_suspend(PMSG_FREEZE); | 275 | error = sysdev_suspend(PMSG_FREEZE); |
276 | if (!error) { | ||
277 | error = syscore_suspend(); | ||
278 | if (error) | ||
279 | sysdev_resume(); | ||
280 | } | ||
275 | if (error) { | 281 | if (error) { |
276 | printk(KERN_ERR "PM: Some system devices failed to power down, " | 282 | printk(KERN_ERR "PM: Some system devices failed to power down, " |
277 | "aborting hibernation\n"); | 283 | "aborting hibernation\n"); |
@@ -295,6 +301,7 @@ static int create_image(int platform_mode) | |||
295 | } | 301 | } |
296 | 302 | ||
297 | Power_up: | 303 | Power_up: |
304 | syscore_resume(); | ||
298 | sysdev_resume(); | 305 | sysdev_resume(); |
299 | /* NOTE: dpm_resume_noirq() is just a resume() for devices | 306 | /* NOTE: dpm_resume_noirq() is just a resume() for devices |
300 | * that suspended with irqs off ... no overall powerup. | 307 | * that suspended with irqs off ... no overall powerup. |
@@ -403,6 +410,11 @@ static int resume_target_kernel(bool platform_mode) | |||
403 | local_irq_disable(); | 410 | local_irq_disable(); |
404 | 411 | ||
405 | error = sysdev_suspend(PMSG_QUIESCE); | 412 | error = sysdev_suspend(PMSG_QUIESCE); |
413 | if (!error) { | ||
414 | error = syscore_suspend(); | ||
415 | if (error) | ||
416 | sysdev_resume(); | ||
417 | } | ||
406 | if (error) | 418 | if (error) |
407 | goto Enable_irqs; | 419 | goto Enable_irqs; |
408 | 420 | ||
@@ -429,6 +441,7 @@ static int resume_target_kernel(bool platform_mode) | |||
429 | restore_processor_state(); | 441 | restore_processor_state(); |
430 | touch_softlockup_watchdog(); | 442 | touch_softlockup_watchdog(); |
431 | 443 | ||
444 | syscore_resume(); | ||
432 | sysdev_resume(); | 445 | sysdev_resume(); |
433 | 446 | ||
434 | Enable_irqs: | 447 | Enable_irqs: |
@@ -516,6 +529,7 @@ int hibernation_platform_enter(void) | |||
516 | 529 | ||
517 | local_irq_disable(); | 530 | local_irq_disable(); |
518 | sysdev_suspend(PMSG_HIBERNATE); | 531 | sysdev_suspend(PMSG_HIBERNATE); |
532 | syscore_suspend(); | ||
519 | if (pm_wakeup_pending()) { | 533 | if (pm_wakeup_pending()) { |
520 | error = -EAGAIN; | 534 | error = -EAGAIN; |
521 | goto Power_up; | 535 | goto Power_up; |
@@ -526,6 +540,7 @@ int hibernation_platform_enter(void) | |||
526 | while (1); | 540 | while (1); |
527 | 541 | ||
528 | Power_up: | 542 | Power_up: |
543 | syscore_resume(); | ||
529 | sysdev_resume(); | 544 | sysdev_resume(); |
530 | local_irq_enable(); | 545 | local_irq_enable(); |
531 | enable_nonboot_cpus(); | 546 | enable_nonboot_cpus(); |