public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Pavel Machek <pavel@ucw.cz>
Cc: linux-pm@lists.osdl.org, Nigel Cunningham <ncunningham@cyclades.com>
Subject: Re: Re: freeze_processes questions
Date: Fri, 8 Apr 2005 13:23:50 +0200	[thread overview]
Message-ID: <200504081323.51164.rjw@sisk.pl> (raw)
In-Reply-To: <20050408062306.GB1381@elf.ucw.cz>

[-- Attachment #1: Type: text/plain, Size: 3128 bytes --]

Hi,

On Friday, 8 of April 2005 08:23, Pavel Machek wrote:
> On ÄŒt 07-04-05 23:03:15, Rafael J. Wysocki wrote:
> > Hi,
> > 
> > On Thursday, 7 of April 2005 22:00, Alan Stern wrote:
> > > On Thu, 7 Apr 2005, Rafael J. Wysocki wrote:
> > ]--snip--[ 
> > > > > If that means waiting more than 10 seconds or so, you should just give up.  
> > > > > Return an error and put a message in the log saying something like "Can't
> > > > > suspend because process XXX is busy".
> > > > 
> > > > OK, that's what we do now.  Except that IMO we should clear the PF_FREEZE flag
> > > > for this process and do recalc_sigpending() for it after we give up, because
> > > > otherwise it will enter the refrigerator sooner or later and it will stay there.
> > > > Alternatively, we can disable the "freezing loop" in refrigerator() as soon as
> > > > thaw_processes() is started.  Also, we can avoid setting PF_FREEZE for
> > > > processes in TASK_UNINTERRUPTIBLE, but count them as "freezable".  Etc.
> > > 
> > > Yes, all the necessary cleanup steps should be taken.
> > 
> > Pavel, which approach do you like most?
> 
> Clearing PF_FREEZE when we fail to stop some process sounds okay to
> me. It would be nice if the patch was actually tested ;-).

The patch (against 2.6.12-rc2) follows.  It has been tested, but of course it's difficult to
recreate every possible scenario. :-)

Greets,
Rafael


Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> 

--- old/kernel/power/process.c	2005-04-08 13:12:55.000000000 +0200
+++ new/kernel/power/process.c	2005-04-08 13:15:23.000000000 +0200
@@ -60,6 +60,7 @@ int freeze_processes(void)
        int todo;
        unsigned long start_time;
 	struct task_struct *g, *p;
+	unsigned long flags;
 	
 	printk( "Stopping tasks: " );
 	start_time = jiffies;
@@ -67,7 +68,6 @@ int freeze_processes(void)
 		todo = 0;
 		read_lock(&tasklist_lock);
 		do_each_thread(g, p) {
-			unsigned long flags;
 			if (!freezeable(p))
 				continue;
 			if ((p->flags & PF_FROZEN) ||
@@ -85,13 +85,28 @@ int freeze_processes(void)
 		} while_each_thread(g, p);
 		read_unlock(&tasklist_lock);
 		yield();			/* Yield is okay here */
-		if (time_after(jiffies, start_time + TIMEOUT)) {
+		if (todo && time_after(jiffies, start_time + TIMEOUT)) {
 			printk( "\n" );
 			printk(KERN_ERR " stopping tasks failed (%d tasks remaining)\n", todo );
-			return todo;
+			break;
 		}
 	} while(todo);
 	
+	if (todo) {
+		read_lock(&tasklist_lock);
+		do_each_thread(g, p)
+			if (p->flags & PF_FREEZE) {
+				pr_debug("  clean up: %s\n", p->comm);
+				p->flags &= ~PF_FREEZE;
+				spin_lock_irqsave(&p->sighand->siglock, flags);
+				recalc_sigpending_tsk(p);
+				spin_unlock_irqrestore(&p->sighand->siglock, flags);
+			}
+		while_each_thread(g, p);
+		read_unlock(&tasklist_lock);
+		return todo;
+	}
+		
 	printk( "|\n" );
 	BUG_ON(in_atomic());
 	return 0;

-- 
- 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"


[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



  reply	other threads:[~2005-04-08 11:23 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-05  9:20 freeze_processes questions Rafael J. Wysocki
2005-04-05  9:27 ` Pavel Machek
2005-04-05  9:53   ` Rafael J. Wysocki
2005-04-05 18:02     ` Rafael J. Wysocki
2005-04-05 18:17       ` Alan Stern
2005-04-05 18:33         ` Rafael J. Wysocki
2005-04-05 20:37       ` Pavel Machek
2005-04-05 22:46         ` Rafael J. Wysocki
2005-04-05 22:57           ` Pavel Machek
2005-04-05 23:10             ` Nigel Cunningham
2005-04-06  6:41               ` Rafael J. Wysocki
2005-04-06 19:06               ` Alan Stern
2005-04-06 20:52                 ` Rafael J. Wysocki
2005-04-06 21:03                   ` Alan Stern
2005-04-06 21:26                     ` David Brownell
2005-04-06 21:17                   ` Pavel Machek
2005-04-06 21:35                     ` Rafael J. Wysocki
2005-04-06 22:07                       ` Nigel Cunningham
2005-04-06 22:41                         ` Rafael J. Wysocki
2005-04-07 14:41                           ` Alan Stern
2005-04-07 17:17                             ` Rafael J. Wysocki
2005-04-07 14:43                         ` Alan Stern
2005-04-07 17:26                           ` Rafael J. Wysocki
2005-04-07  9:11                       ` Pavel Machek
2005-04-07 12:29                         ` Rafael J. Wysocki
2005-04-07 12:47                           ` Nigel Cunningham
2005-04-07 14:36                           ` Alan Stern
2005-04-07 18:03                             ` Rafael J. Wysocki
2005-04-07 20:00                               ` Alan Stern
2005-04-07 20:59                                 ` Rafael J. Wysocki
2005-04-07 22:09                                   ` Alan Stern
2005-04-08  6:20                                   ` Pavel Machek
2005-04-08  9:13                                     ` Rafael J. Wysocki
2005-04-07 21:03                                 ` Rafael J. Wysocki
2005-04-08  6:23                                   ` Pavel Machek
2005-04-08 11:23                                     ` Rafael J. Wysocki [this message]
2005-04-11 23:59                                       ` Pavel Machek
2005-04-27  9:30                                       ` Li Shaohua
2005-04-27  9:53                                         ` Nigel Cunningham
2005-04-28  4:48                                           ` Li Shaohua
2005-04-28  5:05                                             ` Nigel Cunningham
2005-04-28  5:21                                               ` Li Shaohua
2005-04-28  5:49                                                 ` Nigel Cunningham
2005-04-28  6:01                                                   ` Li Shaohua
2005-04-28  6:21                                                     ` Nigel Cunningham
2005-04-28  8:15                                                   ` Pavel Machek
2005-04-28  8:14                                             ` Pavel Machek
2005-04-28 15:19                                               ` Stefan Seyfried
2005-04-28 18:47                                                 ` Pavel Machek
2005-04-08  7:20                               ` Pavel Machek
2005-04-06 21:34               ` David Brownell
2005-04-06 22:03                 ` Nigel Cunningham
2005-04-06 22:20                   ` David Brownell
2005-04-07  9:09                 ` Pavel Machek
2005-04-08  6:23               ` Pavel Machek
2005-04-08  7:18                 ` Nigel Cunningham

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200504081323.51164.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=linux-pm@lists.osdl.org \
    --cc=ncunningham@cyclades.com \
    --cc=pavel@ucw.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox