public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: suspend-devel@lists.sourceforge.net
Cc: Pavel Machek <pavel@suse.cz>, pm list <linux-pm@lists.osdl.org>,
	Stephen Hemminger <shemminger@osdl.org>,
	Nigel Cunningham <ncunningham@linuxmail.org>
Subject: Re: [PATCH -mm 1/2]: PM: Fix handling of stopped tasks
Date: Sun, 10 Dec 2006 11:45:36 +0100	[thread overview]
Message-ID: <200612101145.37342.rjw@sisk.pl> (raw)
In-Reply-To: <200612100127.37288.rjw@sisk.pl>

Hi,

On Sunday, 10 December 2006 01:27, Rafael J. Wysocki wrote:
> On Saturday, 9 December 2006 16:35, Rafael J. Wysocki wrote:
> > On Saturday, 9 December 2006 00:36, Pavel Machek wrote:
> > > Hi!
> > > 
> > > > > > I wonder if we should start a test suite ;-).
> > > > > > 
> > > > > > > This means, however, that with this patch the behavior of a process (gdb)
> > > > > > > after the resume may be different to its normal behavior, which is wrong.
> > > > > > 
> > > > > > Yep.
> > > > 
> > > > Okay, I think I know what to do so that it works.  The above symptoms are not
> > > > present with the appended patch.
> > > 
> > > Looks good to me. Thanks for you work!
> > 
> > Well, there's still a race possible in there, if SIGCONT comes after we have
> > forced the SIGSTOP and before we call signal_wake_up().
> > 
> > I think we should force the SIGSTOP and call signal_wake_up() without
> > releasing the lock.  I'll try to do something along these lines later today.
> 
> I think something like the appended patch will do.
> 
> Greetings,
> Rafael
> 
> 
> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
> ---
>  include/linux/sched.h  |    1 +
>  kernel/power/process.c |   15 ++++++++-------
>  kernel/signal.c        |   16 +++++++++++++++-
>  3 files changed, 24 insertions(+), 8 deletions(-)
> 
> Index: linux-2.6.19-rc6-mm2/kernel/power/process.c
> ===================================================================
> --- linux-2.6.19-rc6-mm2.orig/kernel/power/process.c	2006-12-08 23:20:35.000000000 +0100
> +++ linux-2.6.19-rc6-mm2/kernel/power/process.c	2006-12-10 00:37:24.000000000 +0100
> @@ -28,8 +28,7 @@ static inline int freezeable(struct task
>  	if ((p == current) || 
>  	    (p->flags & PF_NOFREEZE) ||
>  	    (p->exit_state == EXIT_ZOMBIE) ||
> -	    (p->exit_state == EXIT_DEAD) ||
> -	    (p->state == TASK_STOPPED))
> +	    (p->exit_state == EXIT_DEAD))
>  		return 0;
>  	return 1;
>  }
> @@ -61,9 +60,13 @@ static inline void freeze_process(struct
>  	unsigned long flags;
>  
>  	if (!freezing(p)) {
> -		freeze(p);
>  		spin_lock_irqsave(&p->sighand->siglock, flags);
> -		signal_wake_up(p, 0);
> +		freeze(p);
> +		if (p->state == TASK_STOPPED) {
> +			force_sigstop_and_wake_up(p);
> +		} else {
> +			signal_wake_up(p, 0);
> +		}
>  		spin_unlock_irqrestore(&p->sighand->siglock, flags);
>  	}
>  }

Ah, freeze(p) need not be under the lock.

Besides, I'm now thinking the previous version is also correct, because even
if SIGCONT comes after we have forced SIGSTOP, it will remove the SIGSTOP
from the queue and the task's state will change to TASK_RUNNING, so the
next signal_wake_up() will do what it should.

I prefer that one, because it's shorter and doesn't affect sched.h. ;-)

Greetings,
Rafael


-- 
If you don't have the time to read,
you don't have the time or the tools to write.
		- Stephen King

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

  reply	other threads:[~2006-12-10 10:45 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-03 22:18 [PATCH -mm 0/2]: SMP-safe freezer Rafael J. Wysocki
2006-12-03 22:50 ` [PATCH -mm 1/2]: PM: Fix handling of stopped tasks Rafael J. Wysocki
2006-12-05 10:25   ` Pavel Machek
2006-12-05 10:34   ` Pavel Machek
2006-12-05 11:06     ` Rafael J. Wysocki
2006-12-05 14:13       ` Pavel Machek
2006-12-05 14:22         ` Rafael J. Wysocki
2006-12-05 11:24     ` Pavel Machek
2006-12-05 11:38       ` Rafael J. Wysocki
2006-12-05 14:12         ` Pavel Machek
2006-12-05 14:26           ` Rafael J. Wysocki
2006-12-05 14:33             ` Rafael J. Wysocki
2006-12-05 15:27             ` Pavel Machek
2006-12-05 17:22               ` Rafael J. Wysocki
2006-12-05 21:03     ` Rafael J. Wysocki
2006-12-05 21:26       ` Rafael J. Wysocki
2006-12-05 21:42         ` [Suspend-devel] " Rafael J. Wysocki
2006-12-05 22:19       ` Pavel Machek
2006-12-05 22:18         ` Rafael J. Wysocki
2006-12-06  0:07           ` [linux-pm] " Nigel Cunningham
2006-12-05 22:36       ` Pavel Machek
2006-12-05 22:45         ` Rafael J. Wysocki
2006-12-05 23:08           ` Rafael J. Wysocki
2006-12-05 23:45             ` Pavel Machek
2006-12-06  0:02               ` [Suspend-devel] " Nigel Cunningham
2006-12-06 23:13               ` Rafael J. Wysocki
2006-12-08 11:21                 ` Pavel Machek
2006-12-08 11:49                   ` Rafael J. Wysocki
2006-12-08 13:05                     ` Rafael J. Wysocki
2006-12-08 22:07                     ` Rafael J. Wysocki
2006-12-08 23:36                       ` Pavel Machek
2006-12-09 15:35                         ` Rafael J. Wysocki
2006-12-10  0:27                           ` Rafael J. Wysocki
2006-12-10 10:45                             ` Rafael J. Wysocki [this message]
2006-12-10 20:00                               ` Pavel Machek
2006-12-10 11:26                     ` Rafael J. Wysocki
2006-12-03 23:10 ` [PATCH -mm 2/2]: PM: SMP-safe freezer Rafael J. Wysocki
2006-12-04 10:30   ` Pavel Machek
2006-12-04 14:03     ` Rafael J. Wysocki
2006-12-04 19:44       ` Pavel Machek
2006-12-04 19:56         ` Rafael J. Wysocki
2006-12-05  5:43         ` [linux-pm] " David Brownell
2006-12-05 11:14           ` [Suspend-devel] " Rafael J. Wysocki

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=200612101145.37342.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=linux-pm@lists.osdl.org \
    --cc=ncunningham@linuxmail.org \
    --cc=pavel@suse.cz \
    --cc=shemminger@osdl.org \
    --cc=suspend-devel@lists.sourceforge.net \
    /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