From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Pavel Machek <pavel@ucw.cz>
Cc: suspend-devel List <suspend-devel@lists.sourceforge.net>,
pm list <linux-pm@lists.osdl.org>,
Stephen Hemminger <shemminger@osdl.org>
Subject: Re: [PATCH -mm 1/2]: PM: Fix handling of stopped tasks
Date: Tue, 5 Dec 2006 12:06:40 +0100 [thread overview]
Message-ID: <200612051206.40709.rjw@sisk.pl> (raw)
In-Reply-To: <20061205103429.GB5306@elf.ucw.cz>
Hi,
On Tuesday, 5 December 2006 11:34, Pavel Machek wrote:
> Hi!
>
> > Currently, if a task is stopped (ie. it's in the TASK_STOPPED state), it is
> > considered by the freezer as unfreezeable. However, there may be a race
> > between the freezer and the delivery of the continuation signal to the task
> > resulting in the task running after we have finished freezing other tasks.
> > This, in turn, may lead to undesirable effects up to and including a
> > corruption of data.
> >
> > To prevent this from happening we first need to make the freezer consider
> > stopped tasks as freezeable. For this purpose we need to make freezeable()
> > stop returning 0 for these tasks. We must remember, however, that the
> > stopped tasks need not receive the continuation signal before thaw_processes()
> > is called, so as soon as PF_FREEZE is set for them try_to_freeze_tasks()
> > should stop counting them as the ones to wait for. Additionally, if there's a
> > traced task (ie. a task in the TASK_TRACED state) the parent of which has
> > PF_FREEZE set and is stopped, try_to_freeze_tasks() should not wait for it.
> > Moreover, if there are some stopped tasks that haven't received the continuation
> > signal before thaw_processes() is called, we must clear PF_FREEZE for them so
> > that they don't go to the refrigerator when it's no longer desirable.
>
> Actually, what do you think about this patch? It removes special
> handling of TASK_TRACED, and should do the trick, too...
Well, I don't think so, ....
> Pavel
>
> diff --git a/kernel/power/process.c b/kernel/power/process.c
> index 7bcc976..d56e494 100644
> --- a/kernel/power/process.c
> +++ b/kernel/power/process.c
> @@ -26,8 +26,7 @@ static inline int freezeable(struct task
> (p->flags & PF_NOFREEZE) ||
> (p->exit_state == EXIT_ZOMBIE) ||
> (p->exit_state == EXIT_DEAD) ||
> - ((p->exit_state == TASK_TRACED) && frozen(p->parent)) ||
> - (p->state == TASK_STOPPED))
> + ((p->exit_state == TASK_TRACED) && frozen(p->parent)))
> return 0;
> return 1;
> }
> diff --git a/kernel/signal.c b/kernel/signal.c
> index 9a61944..e305ad1 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -1702,7 +1702,9 @@ finish_stop(int stop_count)
> read_unlock(&tasklist_lock);
> }
>
> - schedule();
> + do {
> + schedule();
> + } while (try_to_freeze());
> /*
> * Now we don't run again until continued.
> */
... because if you want try_to_freeze() here to trigger, then the task in
question should have PF_FREEZE set, but we don't set it anywhere.
[Actually I think this particular change is equivalent to moving the
try_to_freeze() in get_signal_to_deliver() to after the relock label. :-)]
And the special handling of traced tasks is needed to clear TIF_SIGPENDING
for a task that had been told to freeze before it's parent froze.
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
next prev parent reply other threads:[~2006-12-05 11:06 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 [this message]
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
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=200612051206.40709.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=linux-pm@lists.osdl.org \
--cc=pavel@ucw.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.