[linux-pm] Re: freeze_processes questions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Friday, 8 of April 2005 08:20, Pavel Machek wrote:
> Hi!
> 
]--snip--[
> 
> As we allow resume to be called from userland, other refrigerator is
> not really an option. We could insert mdelay before resume, or some
> equivalent trick...

I have an idea (provided we can disable/enable usermodehelper as in the
Dmitry's patch):

--- old/kernel/power/process.c	2005-04-06 08:30:47.000000000 +0200
+++ new/kernel/power/process.c	2005-04-08 11:11:23.000000000 +0200
@@ -62,6 +62,26 @@ int freeze_processes(void)
 	struct task_struct *g, *p;
 	
 	printk( "Stopping tasks: " );
+	usermodehelper_disable();
+	yield();
+	start_time = jiffies;
+	do {
+		todo = 0;
+		read_lock(&tasklist_lock);
+		do_each_thread(g, p)
+			if (!(p->flags & PF_NOFREEZE) &&
+			    (p->state == TASK_UNINTERRUPTIBLE))
+				todo++;
+		while_each_thread(g, p);
+		read_unlock(&tasklist_lock);
+		yield();
+		if (time_after(jiffies, start_time + TIMEOUT)) {
+			printk( "\n" );
+			printk(KERN_ERR " stopping tasks faliled (%d unstoppable tasks)\n",
+					todo);
+			return todo;
+		}
+	} while(todo);
 	start_time = jiffies;
 	do {
 		todo = 0;
@@ -100,6 +120,7 @@ void thaw_processes(void)
 	struct task_struct *g, *p;
 
 	printk( "Restarting tasks..." );
+	usermodehelper_enable();
 	read_lock(&tasklist_lock);
 	do_each_thread(g, p) {
 		if (!freezeable(p))

It's not bullet-proof, but should be enough to handle the
"freeze-during-resume" case ...

Greets,
Rafael


-- 
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"

[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux