[PATCH 09/13] PM: wakelock: Abort task freezing if a wake lock is held.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Avoids a problem where the device sometimes hangs for 20 secondsbefore the screen is turned on.
Signed-off-by: Arve Hjønnevåg <arve@xxxxxxxxxxx>--- kernel/power/process.c |   22 +++++++++++++++++----- 1 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/kernel/power/process.c b/kernel/power/process.cindex ca63401..8388d01 100644--- a/kernel/power/process.c+++ b/kernel/power/process.c@@ -13,6 +13,7 @@ #include <linux/module.h> #include <linux/syscalls.h> #include <linux/freezer.h>+#include <linux/wakelock.h>  /*   * Timeout for stopping processes@@ -36,6 +37,7 @@ static int try_to_freeze_tasks(bool sig_only) 	struct timeval start, end; 	u64 elapsed_csecs64; 	unsigned int elapsed_csecs;+	unsigned int wakeup = 0;  	do_gettimeofday(&start); @@ -62,6 +64,10 @@ static int try_to_freeze_tasks(bool sig_only) 		} while_each_thread(g, p); 		read_unlock(&tasklist_lock); 		yield();			/* Yield is okay here */+		if (todo && has_wake_lock(WAKE_LOCK_SUSPEND)) {+			wakeup = 1;+			break;+		} 		if (time_after(jiffies, end_time)) 			break; 	} while (todo);@@ -77,11 +83,17 @@ static int try_to_freeze_tasks(bool sig_only) 		 * and caller must call thaw_processes() if something fails), 		 * but it cleans up leftover PF_FREEZE requests. 		 */-		printk("\n");-		printk(KERN_ERR "Freezing of tasks failed after %d.%02d seconds "-				"(%d tasks refusing to freeze):\n",-				elapsed_csecs / 100, elapsed_csecs % 100, todo);-		show_state();+		if (wakeup) {+			printk("\n");+			printk(KERN_ERR "Freezing of %s aborted\n",+					sig_only ? "user space " : "tasks ");+		} else {+			printk("\n");+			printk(KERN_ERR "Freezing of tasks failed after %d.%02d seconds "+					"(%d tasks refusing to freeze):\n",+					elapsed_csecs / 100, elapsed_csecs % 100, todo);+			show_state();+		} 		read_lock(&tasklist_lock); 		do_each_thread(g, p) { 			task_lock(p);-- 1.6.1
_______________________________________________linux-pm mailing listlinux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx://lists.linux-foundation.org/mailman/listinfo/linux-pm


[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux