diff options
Diffstat (limited to 'kernel/power')
-rw-r--r-- | kernel/power/process.c | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/kernel/power/process.c b/kernel/power/process.c index 02e490e311eb..eefca8581fa0 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -120,22 +120,12 @@ static unsigned int try_to_freeze_tasks(int freeze_user_space) cancel_freezing(p); continue; } - if (is_user_space(p)) { - if (!freeze_user_space) - continue; - - /* Freeze the task unless there is a vfork - * completion pending - */ - if (!p->vfork_done) - freeze_process(p); - } else { - if (freeze_user_space) - continue; - - freeze_process(p); - } - todo++; + if (is_user_space(p) == !freeze_user_space) + continue; + + freeze_process(p); + if (!freezer_should_skip(p)) + todo++; } while_each_thread(g, p); read_unlock(&tasklist_lock); yield(); /* Yield is okay here */ @@ -161,7 +151,8 @@ static unsigned int try_to_freeze_tasks(int freeze_user_space) continue; task_lock(p); - if (freezeable(p) && !frozen(p)) + if (freezeable(p) && !frozen(p) && + !freezer_should_skip(p)) printk(KERN_ERR " %s\n", p->comm); cancel_freezing(p); @@ -210,9 +201,7 @@ static void thaw_tasks(int thaw_user_space) if (is_user_space(p) == !thaw_user_space) continue; - if (!thaw_process(p)) - printk(KERN_WARNING " Strange, %s not stopped\n", - p->comm ); + thaw_process(p); } while_each_thread(g, p); read_unlock(&tasklist_lock); } |