diff options
Diffstat (limited to 'kernel/power')
| -rw-r--r-- | kernel/power/Makefile | 1 | ||||
| -rw-r--r-- | kernel/power/autosleep.c | 1 | ||||
| -rw-r--r-- | kernel/power/console.c | 1 | ||||
| -rw-r--r-- | kernel/power/power.h | 1 | ||||
| -rw-r--r-- | kernel/power/process.c | 1 | ||||
| -rw-r--r-- | kernel/power/suspend.c | 18 | ||||
| -rw-r--r-- | kernel/power/wakelock.c | 1 | 
7 files changed, 17 insertions, 7 deletions
| diff --git a/kernel/power/Makefile b/kernel/power/Makefile index eb4f717705ba..a3f79f0eef36 100644 --- a/kernel/power/Makefile +++ b/kernel/power/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  ccflags-$(CONFIG_PM_DEBUG)	:= -DDEBUG diff --git a/kernel/power/autosleep.c b/kernel/power/autosleep.c index 9012ecf7b814..41e83a779e19 100644 --- a/kernel/power/autosleep.c +++ b/kernel/power/autosleep.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * kernel/power/autosleep.c   * diff --git a/kernel/power/console.c b/kernel/power/console.c index 0e781798b0b3..fcdf0e14a47d 100644 --- a/kernel/power/console.c +++ b/kernel/power/console.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Functions for saving/restoring console.   * diff --git a/kernel/power/power.h b/kernel/power/power.h index 1d2d761e3c25..f29cd178df90 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #include <linux/suspend.h>  #include <linux/suspend_ioctls.h>  #include <linux/utsname.h> diff --git a/kernel/power/process.c b/kernel/power/process.c index 50f25cb370c6..7381d49a44db 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * drivers/power/process.c - Functions for starting/stopping processes on    *                           suspend transitions. diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 3e2b4f519009..ccd2d20e6b06 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -120,22 +120,26 @@ static void s2idle_loop(void)  		 * frozen processes + suspended devices + idle processors.  		 * Thus s2idle_enter() should be called right after  		 * all devices have been suspended. +		 * +		 * Wakeups during the noirq suspend of devices may be spurious, +		 * so prevent them from terminating the loop right away.  		 */  		error = dpm_noirq_suspend_devices(PMSG_SUSPEND);  		if (!error)  			s2idle_enter(); +		else if (error == -EBUSY && pm_wakeup_pending()) +			error = 0; -		dpm_noirq_resume_devices(PMSG_RESUME); -		if (error && (error != -EBUSY || !pm_wakeup_pending())) { -			dpm_noirq_end(); -			break; -		} - -		if (s2idle_ops && s2idle_ops->wake) +		if (!error && s2idle_ops && s2idle_ops->wake)  			s2idle_ops->wake(); +		dpm_noirq_resume_devices(PMSG_RESUME); +  		dpm_noirq_end(); +		if (error) +			break; +  		if (s2idle_ops && s2idle_ops->sync)  			s2idle_ops->sync(); diff --git a/kernel/power/wakelock.c b/kernel/power/wakelock.c index 1896386e16bb..dfba59be190b 100644 --- a/kernel/power/wakelock.c +++ b/kernel/power/wakelock.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * kernel/power/wakelock.c   * |