diff options
Diffstat (limited to 'kernel/power/hibernate.c')
| -rw-r--r-- | kernel/power/hibernate.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 1832bd264219..aeabd26e3342 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -23,6 +23,7 @@  #include <linux/cpu.h>  #include <linux/freezer.h>  #include <linux/gfp.h> +#include <linux/syscore_ops.h>  #include <scsi/scsi_scan.h>  #include <asm/suspend.h> @@ -272,6 +273,8 @@ static int create_image(int platform_mode)  	local_irq_disable();  	error = sysdev_suspend(PMSG_FREEZE); +	if (!error) +		error = syscore_suspend();  	if (error) {  		printk(KERN_ERR "PM: Some system devices failed to power down, "  			"aborting hibernation\n"); @@ -295,6 +298,7 @@ static int create_image(int platform_mode)  	}   Power_up: +	syscore_resume();  	sysdev_resume();  	/* NOTE:  dpm_resume_noirq() is just a resume() for devices  	 * that suspended with irqs off ... no overall powerup. @@ -403,6 +407,8 @@ static int resume_target_kernel(bool platform_mode)  	local_irq_disable();  	error = sysdev_suspend(PMSG_QUIESCE); +	if (!error) +		error = syscore_suspend();  	if (error)  		goto Enable_irqs; @@ -429,6 +435,7 @@ static int resume_target_kernel(bool platform_mode)  	restore_processor_state();  	touch_softlockup_watchdog(); +	syscore_resume();  	sysdev_resume();   Enable_irqs: @@ -516,6 +523,7 @@ int hibernation_platform_enter(void)  	local_irq_disable();  	sysdev_suspend(PMSG_HIBERNATE); +	syscore_suspend();  	if (pm_wakeup_pending()) {  		error = -EAGAIN;  		goto Power_up; @@ -526,6 +534,7 @@ int hibernation_platform_enter(void)  	while (1);   Power_up: +	syscore_resume();  	sysdev_resume();  	local_irq_enable();  	enable_nonboot_cpus();  | 
