[PATCH 3/8] PM: suspend_block: Abort task freezing if a suspend_blocker is active.

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=
Date: Friday, April 30, 2010 - 3:36 pm

If a suspend_blocker is active, suspend will fail anyway. Since
try_to_freeze_tasks can take up to 20 seconds to complete or fail, aborting
as soon as someone blocks suspend (e.g. from an interrupt handler) improves
the worst case wakeup latency.

On an older kernel where task freezing could fail for processes attached
to a debugger, this fixed a problem where the device sometimes hung for
20 seconds before the screen turned on.

Signed-off-by: Arve Hjønnevåg <arve@android.com>
---
 kernel/power/process.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/kernel/power/process.c b/kernel/power/process.c
index 71ae290..d8ebd50 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -15,6 +15,7 @@
 #include <linux/syscalls.h>
 #include <linux/freezer.h>
 #include <linux/delay.h>
+#include <linux/suspend_blocker.h>
 
 /* 
  * Timeout for stopping processes
@@ -38,6 +39,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);
 
@@ -63,6 +65,10 @@ static int try_to_freeze_tasks(bool sig_only)
 				todo++;
 		} while_each_thread(g, p);
 		read_unlock(&tasklist_lock);
+		if (todo && suspend_is_blocked()) {
+			wakeup = true;
+			break;
+		}
 		if (!todo || time_after(jiffies, end_time))
 			break;
 
@@ -85,13 +91,15 @@ 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):\n",
+				wakeup ? "aborted" : "failed",
 				elapsed_csecs / 100, elapsed_csecs % 100, todo);
 		read_lock(&tasklist_lock);
 		do_each_thread(g, p) {
 			task_lock(p);
-			if (freezing(p) && !freezer_should_skip(p))
+			if (freezing(p) && !freezer_should_skip(p)
+					&& elapsed_csecs > 100)
 				sched_show_task(p);
 			cancel_freezing(p);
 			task_unlock(p);
-- 
1.6.5.1

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/8] Suspend block api (version 6), =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:36 pm)
[PATCH 1/8] PM: Add suspend block api., =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:36 pm)
[PATCH 2/8] PM: suspend_block: Add driver to access suspen ..., =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:36 pm)
[PATCH 3/8] PM: suspend_block: Abort task freezing if a su ..., =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:36 pm)
[PATCH 4/8] PM: suspend_block: Add debugfs file, =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:36 pm)
[PATCH 5/8] PM: suspend_block: Add suspend_blocker stats, =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:36 pm)
[PATCH 6/8] PM: Add suspend blocking work., =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:36 pm)
[PATCH 7/8] Input: Block suspend while event queue is not ..., =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:37 pm)
[PATCH 8/8] power_supply: Block suspend while power supply ..., =?UTF-8?q?Arve=20Hj= ..., (Fri Apr 30, 3:37 pm)
Re: [PATCH 6/8] PM: Add suspend blocking work., Tejun Heo, (Fri Apr 30, 11:14 pm)
Re: [PATCH 1/8] PM: Add suspend block api., Pavel Machek, (Sat May 1, 11:56 pm)
Re: [PATCH 1/8] PM: Add suspend block api., Pavel Machek, (Sun May 2, 12:01 am)
Re: [PATCH 6/8] PM: Add suspend blocking work., Pavel Machek, (Sun May 2, 12:05 am)
Re: [PATCH 1/8] PM: Add suspend block api., Rafael J. Wysocki, (Sun May 2, 1:10 pm)
Re: [PATCH 1/8] PM: Add suspend block api., Pavel Machek, (Sun May 2, 1:52 pm)
Re: [PATCH 1/8] PM: Add suspend block api., Rafael J. Wysocki, (Sun May 2, 2:29 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Kevin Hilman, (Mon May 3, 9:40 am)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Mon May 3, 11:07 am)
Re: [PATCH 1/8] PM: Add suspend block api., Pavel Machek, (Mon May 3, 12:01 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Mon May 3, 2:18 pm)
Re: [PATCH 1/8] PM: Add suspend block api., Rafael J. Wysocki, (Mon May 3, 2:38 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Mon May 3, 2:50 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Kevin Hilman, (Mon May 3, 4:37 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Arve Hjønnevåg, (Mon May 3, 5:09 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Brian Swetland, (Mon May 3, 5:43 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Mon May 3, 5:43 pm)
Re: [PATCH 4/8] PM: suspend_block: Add debugfs file, Andi Kleen, (Tue May 4, 4:16 am)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Tue May 4, 6:59 am)
Re: [PATCH 0/8] Suspend block api (version 6), Kevin Hilman, (Tue May 4, 8:13 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Tue May 4, 8:28 am)
Re: [PATCH 0/8] Suspend block api (version 6), Kevin Hilman, (Tue May 4, 11:04 am)
Re: [PATCH 0/8] Suspend block api (version 6), Kevin Hilman, (Tue May 4, 11:06 am)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Tue May 4, 12:06 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Tue May 4, 1:23 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Tue May 4, 1:37 pm)
Re: [linux-pm] [PATCH 1/8] PM: Add suspend block api., Arve Hjønnevåg, (Tue May 4, 1:40 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Tue May 4, 1:44 pm)
Re: [PATCH 4/8] PM: suspend_block: Add debugfs file, Arve Hjønnevåg, (Tue May 4, 2:06 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Kevin Hilman, (Tue May 4, 4:14 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Tue May 4, 4:42 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Tue May 4, 4:56 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Tue May 4, 5:22 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Brian Swetland, (Tue May 4, 6:11 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Wed May 5, 4:06 am)
Re: [PATCH 0/8] Suspend block api (version 6), Brian Swetland, (Wed May 5, 5:00 am)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Wed May 5, 6:56 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Wed May 5, 10:33 am)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Wed May 5, 11:39 am)
Re: [PATCH 0/8] Suspend block api (version 6), mark gross, (Wed May 5, 1:35 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Kevin Hilman, (Mon May 10, 11:06 am)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Mon May 10, 1:25 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Tony Lindgren, (Tue May 11, 9:12 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Tue May 11, 9:14 am)
Re: [PATCH 0/8] Suspend block api (version 6), Tony Lindgren, (Tue May 11, 9:36 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Tue May 11, 9:45 am)
Re: [PATCH 0/8] Suspend block api (version 6), Tony Lindgren, (Tue May 11, 9:58 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Tue May 11, 10:03 am)
Re: [PATCH 0/8] Suspend block api (version 6), Tony Lindgren, (Tue May 11, 10:24 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Tue May 11, 10:30 am)
Re: [PATCH 0/8] Suspend block api (version 6), Tony Lindgren, (Tue May 11, 10:48 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Tue May 11, 11:01 am)
Re: [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Tue May 11, 11:19 am)
Re: [PATCH 0/8] Suspend block api (version 6), Arve Hjønnevåg, (Tue May 11, 6:11 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Mark Brown, (Wed May 12, 4:22 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Paul Walmsley, (Wed May 12, 8:35 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Thu May 13, 5:17 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Daniel Walker, (Thu May 13, 10:33 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Brian Swetland, (Thu May 13, 11:17 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Daniel Walker, (Thu May 13, 11:25 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Thu May 13, 11:36 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Daniel Walker, (Thu May 13, 11:59 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Thu May 13, 12:11 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Daniel Walker, (Thu May 13, 12:36 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Thu May 13, 12:48 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Thu May 13, 2:11 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Daniel Walker, (Thu May 13, 2:16 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Thu May 13, 2:27 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Daniel Walker, (Thu May 13, 2:33 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Tony Lindgren, (Thu May 13, 2:36 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Thu May 13, 2:54 pm)
RE: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Woodruff, Richard, (Thu May 13, 3:33 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Rafael J. Wysocki, (Thu May 13, 3:46 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Arve Hjønnevåg, (Thu May 13, 4:06 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Brian Swetland, (Thu May 13, 4:28 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Brian Swetland, (Thu May 13, 4:48 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Daniel Walker, (Fri May 14, 9:47 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 6), Brian Swetland, (Mon May 17, 4:04 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Pavel Machek, (Mon May 24, 11:57 am)
Re: [PATCH 0/8] Suspend block api (version 6), Matthew Garrett, (Mon May 24, 12:08 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Arve Hjønnevåg, (Mon May 24, 6:16 pm)
Re: [PATCH 0/8] Suspend block api (version 6), Pavel Machek, (Wed May 26, 10:32 am)