[PATCH] swsusp: thaw userspace and kernel space separately

Modify process thawing so that we can thaw kernel space without thawing
userspace, and thaw kernelspace first.  This will be useful in later
patches, where I intend to get swsusp thawing kernel threads only before
seeking to free memory.

Signed-off-by: Nigel Cunningham <nigel@suspend2.net>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
此提交包含在:
Nigel Cunningham
2006-12-06 20:34:28 -08:00
提交者 Linus Torvalds
父節點 14b5b7cfaa
當前提交 ff39593ad0
共有 2 個檔案被更改,包括 26 行新增8 行删除

查看文件

@@ -153,18 +153,29 @@ int freeze_processes(void)
return 0;
}
void thaw_processes(void)
void thaw_some_processes(int all)
{
struct task_struct *g, *p;
int pass = 0; /* Pass 0 = Kernel space, 1 = Userspace */
printk("Restarting tasks... ");
read_lock(&tasklist_lock);
do_each_thread(g, p) {
if (!freezeable(p))
continue;
if (!thaw_process(p))
printk(KERN_INFO "Strange, %s not stopped\n", p->comm);
} while_each_thread(g, p);
do {
do_each_thread(g, p) {
/*
* is_user = 0 if kernel thread or borrowed mm,
* 1 otherwise.
*/
int is_user = !!(p->mm && !(p->flags & PF_BORROWED_MM));
if (!freezeable(p) || (is_user != pass))
continue;
if (!thaw_process(p))
printk(KERN_INFO
"Strange, %s not stopped\n", p->comm);
} while_each_thread(g, p);
pass++;
} while (pass < 2 && all);
read_unlock(&tasklist_lock);
schedule();