[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>
This commit is contained in:
committed by
Linus Torvalds
parent
14b5b7cfaa
commit
ff39593ad0
@@ -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();
|
||||
|
Reference in New Issue
Block a user