From 2d581e604771771dd63946cbed17d6b7ec79bd9d Mon Sep 17 00:00:00 2001 From: nbd Date: Sun, 14 Jun 2009 20:42:33 +0000 Subject: add the 'goldfish' target, useful for experimenting with virtual phone hardware (includes the emulator) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@16459 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...ock-Abort-task-freezing-if-a-wake-lock-is.patch | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 target/linux/goldfish/patches-2.6.30/0070-PM-wakelock-Abort-task-freezing-if-a-wake-lock-is.patch (limited to 'target/linux/goldfish/patches-2.6.30/0070-PM-wakelock-Abort-task-freezing-if-a-wake-lock-is.patch') diff --git a/target/linux/goldfish/patches-2.6.30/0070-PM-wakelock-Abort-task-freezing-if-a-wake-lock-is.patch b/target/linux/goldfish/patches-2.6.30/0070-PM-wakelock-Abort-task-freezing-if-a-wake-lock-is.patch new file mode 100644 index 000000000..a93df9ad4 --- /dev/null +++ b/target/linux/goldfish/patches-2.6.30/0070-PM-wakelock-Abort-task-freezing-if-a-wake-lock-is.patch @@ -0,0 +1,64 @@ +From 3f8e407c418205252f00615da4d0182e8c960344 Mon Sep 17 00:00:00 2001 +From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= +Date: Tue, 14 Oct 2008 16:02:39 -0700 +Subject: [PATCH 070/134] PM: wakelock: Abort task freezing if a wake lock is held. + +Avoids a problem where the device sometimes hangs for 20 seconds +before the screen is turned on. +--- + kernel/power/process.c | 23 ++++++++++++++++++----- + 1 files changed, 18 insertions(+), 5 deletions(-) + +--- a/kernel/power/process.c ++++ b/kernel/power/process.c +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + + /* + * Timeout for stopping processes +@@ -36,6 +37,7 @@ static int try_to_freeze_tasks(bool sig_ + 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_ + } 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,18 @@ static int try_to_freeze_tasks(bool sig_ + * 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); -- cgit v1.2.3