summaryrefslogtreecommitdiffstats
path: root/kernel/power
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/power')
-rw-r--r--kernel/power/process.c17
1 files changed, 3 insertions, 14 deletions
diff --git a/kernel/power/process.c b/kernel/power/process.c
index 8f27d5a8adf6..2fba066e125f 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -144,23 +144,12 @@ int freeze_processes(void)
144 /* 144 /*
145 * Now that the whole userspace is frozen we need to disbale 145 * Now that the whole userspace is frozen we need to disbale
146 * the OOM killer to disallow any further interference with 146 * the OOM killer to disallow any further interference with
147 * killable tasks. 147 * killable tasks. There is no guarantee oom victims will
148 * ever reach a point they go away we have to wait with a timeout.
148 */ 149 */
149 if (!error && !oom_killer_disable()) 150 if (!error && !oom_killer_disable(msecs_to_jiffies(freeze_timeout_msecs)))
150 error = -EBUSY; 151 error = -EBUSY;
151 152
152 /*
153 * There is a hard to fix race between oom_reaper kernel thread
154 * and oom_killer_disable. oom_reaper calls exit_oom_victim
155 * before the victim reaches exit_mm so try to freeze all the tasks
156 * again and catch such a left over task.
157 */
158 if (!error) {
159 pr_info("Double checking all user space processes after OOM killer disable... ");
160 error = try_to_freeze_tasks(true);
161 pr_cont("\n");
162 }
163
164 if (error) 153 if (error)
165 thaw_processes(); 154 thaw_processes();
166 return error; 155 return error;