diff options
| -rw-r--r-- | drivers/base/power/main.c | 2 | ||||
| -rw-r--r-- | drivers/base/power/wakeup.c | 20 | ||||
| -rw-r--r-- | include/linux/suspend.h | 4 | ||||
| -rw-r--r-- | kernel/power/hibernate.c | 4 | ||||
| -rw-r--r-- | kernel/power/process.c | 2 | ||||
| -rw-r--r-- | kernel/power/suspend.c | 2 | 
6 files changed, 17 insertions, 17 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 4747a1e8b44..8a5258339ca 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1056,7 +1056,7 @@ static int dpm_prepare(pm_message_t state)  		if (pm_runtime_barrier(dev) && device_may_wakeup(dev))  			pm_wakeup_event(dev, 0); -		if (!pm_check_wakeup_events()) { +		if (pm_wakeup_pending()) {  			pm_runtime_put_sync(dev);  			error = -EBUSY;  		} else { diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index 71c5528e1c3..8ec406d8f54 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -542,26 +542,26 @@ static void pm_wakeup_update_hit_counts(void)  }  /** - * pm_check_wakeup_events - Check for new wakeup events. + * pm_wakeup_pending - Check if power transition in progress should be aborted.   *   * Compare the current number of registered wakeup events with its preserved - * value from the past to check if new wakeup events have been registered since - * the old value was stored.  Check if the current number of wakeup events being - * processed is zero. + * value from the past and return true if new wakeup events have been registered + * since the old value was stored.  Also return true if the current number of + * wakeup events being processed is different from zero.   */ -bool pm_check_wakeup_events(void) +bool pm_wakeup_pending(void)  {  	unsigned long flags; -	bool ret = true; +	bool ret = false;  	spin_lock_irqsave(&events_lock, flags);  	if (events_check_enabled) { -		ret = ((unsigned int)atomic_read(&event_count) == saved_count) -			&& !atomic_read(&events_in_progress); -		events_check_enabled = ret; +		ret = ((unsigned int)atomic_read(&event_count) != saved_count) +			|| atomic_read(&events_in_progress); +		events_check_enabled = !ret;  	}  	spin_unlock_irqrestore(&events_lock, flags); -	if (!ret) +	if (ret)  		pm_wakeup_update_hit_counts();  	return ret;  } diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 26697514c5e..144b34be5c3 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -292,7 +292,7 @@ extern int unregister_pm_notifier(struct notifier_block *nb);  /* drivers/base/power/wakeup.c */  extern bool events_check_enabled; -extern bool pm_check_wakeup_events(void); +extern bool pm_wakeup_pending(void);  extern bool pm_get_wakeup_count(unsigned int *count);  extern bool pm_save_wakeup_count(unsigned int count);  #else /* !CONFIG_PM_SLEEP */ @@ -309,7 +309,7 @@ static inline int unregister_pm_notifier(struct notifier_block *nb)  #define pm_notifier(fn, pri)	do { (void)(fn); } while (0) -static inline bool pm_check_wakeup_events(void) { return true; } +static inline bool pm_wakeup_pending(void) { return false; }  #endif /* !CONFIG_PM_SLEEP */  extern struct mutex pm_mutex; diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index c9a98beffee..870f72bc72a 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -278,7 +278,7 @@ static int create_image(int platform_mode)  		goto Enable_irqs;  	} -	if (hibernation_test(TEST_CORE) || !pm_check_wakeup_events()) +	if (hibernation_test(TEST_CORE) || pm_wakeup_pending())  		goto Power_up;  	in_suspend = 1; @@ -516,7 +516,7 @@ int hibernation_platform_enter(void)  	local_irq_disable();  	sysdev_suspend(PMSG_HIBERNATE); -	if (!pm_check_wakeup_events()) { +	if (pm_wakeup_pending()) {  		error = -EAGAIN;  		goto Power_up;  	} diff --git a/kernel/power/process.c b/kernel/power/process.c index eb2c88a9e56..d6d2a10320e 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -85,7 +85,7 @@ static int try_to_freeze_tasks(bool sig_only)  		if (!todo || time_after(jiffies, end_time))  			break; -		if (!pm_check_wakeup_events()) { +		if (pm_wakeup_pending()) {  			wakeup = true;  			break;  		} diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index ecf770509d0..5e644e3a6bf 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -163,7 +163,7 @@ static int suspend_enter(suspend_state_t state)  	error = sysdev_suspend(PMSG_SUSPEND);  	if (!error) { -		if (!suspend_test(TEST_CORE) && pm_check_wakeup_events()) { +		if (!(suspend_test(TEST_CORE) || pm_wakeup_pending())) {  			error = suspend_ops->enter(state);  			events_check_enabled = false;  		}  |