aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/power/process.c')
-rw-r--r--kernel/power/process.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/kernel/power/process.c b/kernel/power/process.c
index 0cf3a27a6c9..31338cdeafc 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -16,6 +16,7 @@
16#include <linux/freezer.h> 16#include <linux/freezer.h>
17#include <linux/delay.h> 17#include <linux/delay.h>
18#include <linux/workqueue.h> 18#include <linux/workqueue.h>
19#include <linux/wakelock.h>
19 20
20/* 21/*
21 * Timeout for stopping processes 22 * Timeout for stopping processes
@@ -82,6 +83,10 @@ static int try_to_freeze_tasks(bool sig_only)
82 todo += wq_busy; 83 todo += wq_busy;
83 } 84 }
84 85
86 if (todo && has_wake_lock(WAKE_LOCK_SUSPEND)) {
87 wakeup = 1;
88 break;
89 }
85 if (!todo || time_after(jiffies, end_time)) 90 if (!todo || time_after(jiffies, end_time))
86 break; 91 break;
87 92
@@ -108,19 +113,25 @@ static int try_to_freeze_tasks(bool sig_only)
108 * and caller must call thaw_processes() if something fails), 113 * and caller must call thaw_processes() if something fails),
109 * but it cleans up leftover PF_FREEZE requests. 114 * but it cleans up leftover PF_FREEZE requests.
110 */ 115 */
111 printk("\n"); 116 if(wakeup) {
112 printk(KERN_ERR "Freezing of tasks %s after %d.%02d seconds " 117 printk("\n");
113 "(%d tasks refusing to freeze, wq_busy=%d):\n", 118 printk(KERN_ERR "Freezing of %s aborted\n",
114 wakeup ? "aborted" : "failed", 119 sig_only ? "user space " : "tasks ");
115 elapsed_csecs / 100, elapsed_csecs % 100, 120 }
116 todo - wq_busy, wq_busy); 121 else {
117 122 printk("\n");
123 printk(KERN_ERR "Freezing of tasks failed after %d.%02d seconds "
124 "(%d tasks refusing to freeze, wq_busy=%d):\n",
125 elapsed_csecs / 100, elapsed_csecs % 100,
126 todo - wq_busy, wq_busy);
127 }
118 thaw_workqueues(); 128 thaw_workqueues();
119 129
120 read_lock(&tasklist_lock); 130 read_lock(&tasklist_lock);
121 do_each_thread(g, p) { 131 do_each_thread(g, p) {
122 task_lock(p); 132 task_lock(p);
123 if (!wakeup && freezing(p) && !freezer_should_skip(p)) 133 if (freezing(p) && !freezer_should_skip(p) &&
134 elapsed_csecs > 100)
124 sched_show_task(p); 135 sched_show_task(p);
125 cancel_freezing(p); 136 cancel_freezing(p);
126 task_unlock(p); 137 task_unlock(p);