diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kexec.c | 8 | ||||
| -rw-r--r-- | kernel/power/hibernate.c | 24 | ||||
| -rw-r--r-- | kernel/power/main.c | 8 | ||||
| -rw-r--r-- | kernel/power/suspend.c | 4 | 
4 files changed, 24 insertions, 20 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c index 7b088678670..a6a675cb981 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -1546,13 +1546,13 @@ int kernel_kexec(void)  		if (error)  			goto Resume_console;  		/* At this point, dpm_suspend_start() has been called, -		 * but *not* dpm_suspend_noirq(). We *must* call -		 * dpm_suspend_noirq() now.  Otherwise, drivers for +		 * but *not* dpm_suspend_end(). We *must* call +		 * dpm_suspend_end() now.  Otherwise, drivers for  		 * some devices (e.g. interrupt controllers) become  		 * desynchronized with the actual state of the  		 * hardware at resume time, and evil weirdness ensues.  		 */ -		error = dpm_suspend_noirq(PMSG_FREEZE); +		error = dpm_suspend_end(PMSG_FREEZE);  		if (error)  			goto Resume_devices;  		error = disable_nonboot_cpus(); @@ -1579,7 +1579,7 @@ int kernel_kexec(void)  		local_irq_enable();   Enable_cpus:  		enable_nonboot_cpus(); -		dpm_resume_noirq(PMSG_RESTORE); +		dpm_resume_start(PMSG_RESTORE);   Resume_devices:  		dpm_resume_end(PMSG_RESTORE);   Resume_console: diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 6d6d2887033..a5d4cf0aa03 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -245,8 +245,8 @@ void swsusp_show_speed(struct timeval *start, struct timeval *stop,   * create_image - Create a hibernation image.   * @platform_mode: Whether or not to use the platform driver.   * - * Execute device drivers' .freeze_noirq() callbacks, create a hibernation image - * and execute the drivers' .thaw_noirq() callbacks. + * Execute device drivers' "late" and "noirq" freeze callbacks, create a + * hibernation image and run the drivers' "noirq" and "early" thaw callbacks.   *   * Control reappears in this routine after the subsequent restore.   */ @@ -254,7 +254,7 @@ static int create_image(int platform_mode)  {  	int error; -	error = dpm_suspend_noirq(PMSG_FREEZE); +	error = dpm_suspend_end(PMSG_FREEZE);  	if (error) {  		printk(KERN_ERR "PM: Some devices failed to power down, "  			"aborting hibernation\n"); @@ -306,7 +306,7 @@ static int create_image(int platform_mode)   Platform_finish:  	platform_finish(platform_mode); -	dpm_resume_noirq(in_suspend ? +	dpm_resume_start(in_suspend ?  		(error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE);  	return error; @@ -394,16 +394,16 @@ int hibernation_snapshot(int platform_mode)   * resume_target_kernel - Restore system state from a hibernation image.   * @platform_mode: Whether or not to use the platform driver.   * - * Execute device drivers' .freeze_noirq() callbacks, restore the contents of - * highmem that have not been restored yet from the image and run the low-level - * code that will restore the remaining contents of memory and switch to the - * just restored target kernel. + * Execute device drivers' "noirq" and "late" freeze callbacks, restore the + * contents of highmem that have not been restored yet from the image and run + * the low-level code that will restore the remaining contents of memory and + * switch to the just restored target kernel.   */  static int resume_target_kernel(bool platform_mode)  {  	int error; -	error = dpm_suspend_noirq(PMSG_QUIESCE); +	error = dpm_suspend_end(PMSG_QUIESCE);  	if (error) {  		printk(KERN_ERR "PM: Some devices failed to power down, "  			"aborting resume\n"); @@ -460,7 +460,7 @@ static int resume_target_kernel(bool platform_mode)   Cleanup:  	platform_restore_cleanup(platform_mode); -	dpm_resume_noirq(PMSG_RECOVER); +	dpm_resume_start(PMSG_RECOVER);  	return error;  } @@ -518,7 +518,7 @@ int hibernation_platform_enter(void)  		goto Resume_devices;  	} -	error = dpm_suspend_noirq(PMSG_HIBERNATE); +	error = dpm_suspend_end(PMSG_HIBERNATE);  	if (error)  		goto Resume_devices; @@ -549,7 +549,7 @@ int hibernation_platform_enter(void)   Platform_finish:  	hibernation_ops->finish(); -	dpm_resume_noirq(PMSG_RESTORE); +	dpm_resume_start(PMSG_RESTORE);   Resume_devices:  	entering_platform_hibernation = false; diff --git a/kernel/power/main.c b/kernel/power/main.c index 9824b41e5a1..8c5014a4e05 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -165,16 +165,20 @@ static int suspend_stats_show(struct seq_file *s, void *unused)  	last_errno %= REC_FAILED_NUM;  	last_step = suspend_stats.last_failed_step + REC_FAILED_NUM - 1;  	last_step %= REC_FAILED_NUM; -	seq_printf(s, "%s: %d\n%s: %d\n%s: %d\n%s: %d\n" -			"%s: %d\n%s: %d\n%s: %d\n%s: %d\n", +	seq_printf(s, "%s: %d\n%s: %d\n%s: %d\n%s: %d\n%s: %d\n" +			"%s: %d\n%s: %d\n%s: %d\n%s: %d\n%s: %d\n",  			"success", suspend_stats.success,  			"fail", suspend_stats.fail,  			"failed_freeze", suspend_stats.failed_freeze,  			"failed_prepare", suspend_stats.failed_prepare,  			"failed_suspend", suspend_stats.failed_suspend, +			"failed_suspend_late", +				suspend_stats.failed_suspend_late,  			"failed_suspend_noirq",  				suspend_stats.failed_suspend_noirq,  			"failed_resume", suspend_stats.failed_resume, +			"failed_resume_early", +				suspend_stats.failed_resume_early,  			"failed_resume_noirq",  				suspend_stats.failed_resume_noirq);  	seq_printf(s,	"failures:\n  last_failed_dev:\t%-s\n", diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 4fd51beed87..560a639614a 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -147,7 +147,7 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)  			goto Platform_finish;  	} -	error = dpm_suspend_noirq(PMSG_SUSPEND); +	error = dpm_suspend_end(PMSG_SUSPEND);  	if (error) {  		printk(KERN_ERR "PM: Some devices failed to power down\n");  		goto Platform_finish; @@ -189,7 +189,7 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)  	if (suspend_ops->wake)  		suspend_ops->wake(); -	dpm_resume_noirq(PMSG_RESUME); +	dpm_resume_start(PMSG_RESUME);   Platform_finish:  	if (suspend_ops->finish)  |