From 3ce3eea956958133bcd5d1b8fdc5661c8681fd49 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Mon, 4 Oct 2010 22:07:32 +0200 Subject: [PATCH] --- yaml --- r: 212375 b: refs/heads/master c: dbeeec5fe868f2e2e92fe94daa2c5a047240fdc4 h: refs/heads/master i: 212373: 58b1b42ff2c2859044f65e3ebba7304786db76d0 212371: 06e26747fc1929788cb953047b762ce68fa56ed6 212367: 03deb7c93430c0abad2c96a6e5ac312e004be05d v: v3 --- [refs] | 2 +- trunk/include/linux/suspend.h | 2 ++ trunk/kernel/power/process.c | 11 +++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 162d2896e34b..9323b65bb5e6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5fc62aad4e7779c2f04691e48b351d08c050c1f1 +refs/heads/master: dbeeec5fe868f2e2e92fe94daa2c5a047240fdc4 diff --git a/trunk/include/linux/suspend.h b/trunk/include/linux/suspend.h index 6b1712c51102..26697514c5ec 100644 --- a/trunk/include/linux/suspend.h +++ b/trunk/include/linux/suspend.h @@ -308,6 +308,8 @@ 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; } #endif /* !CONFIG_PM_SLEEP */ extern struct mutex pm_mutex; diff --git a/trunk/kernel/power/process.c b/trunk/kernel/power/process.c index 028a99598f49..e50b4c1b2a0f 100644 --- a/trunk/kernel/power/process.c +++ b/trunk/kernel/power/process.c @@ -40,6 +40,7 @@ static int try_to_freeze_tasks(bool sig_only) struct timeval start, end; u64 elapsed_csecs64; unsigned int elapsed_csecs; + bool wakeup = false; do_gettimeofday(&start); @@ -78,6 +79,11 @@ static int try_to_freeze_tasks(bool sig_only) if (!todo || time_after(jiffies, end_time)) break; + if (!pm_check_wakeup_events()) { + wakeup = true; + break; + } + /* * We need to retry, but first give the freezing tasks some * time to enter the regrigerator. @@ -97,8 +103,9 @@ static int try_to_freeze_tasks(bool sig_only) * but it cleans up leftover PF_FREEZE requests. */ printk("\n"); - printk(KERN_ERR "Freezing of tasks failed after %d.%02d seconds " + printk(KERN_ERR "Freezing of tasks %s after %d.%02d seconds " "(%d tasks refusing to freeze, wq_busy=%d):\n", + wakeup ? "aborted" : "failed", elapsed_csecs / 100, elapsed_csecs % 100, todo - wq_busy, wq_busy); @@ -107,7 +114,7 @@ static int try_to_freeze_tasks(bool sig_only) read_lock(&tasklist_lock); do_each_thread(g, p) { task_lock(p); - if (freezing(p) && !freezer_should_skip(p)) + if (!wakeup && freezing(p) && !freezer_should_skip(p)) sched_show_task(p); cancel_freezing(p); task_unlock(p);