From: Oleg Nesterov <oleg@tv-sign.ru>
To: Gautham R Shenoy <ego@in.ibm.com>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
mingo@elte.hu, vatsa@in.ibm.com, paulmck@us.ibm.com,
pavel@ucw.cz
Subject: Re: [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop race
Date: Mon, 23 Apr 2007 22:39:56 +0400 [thread overview]
Message-ID: <20070423183956.GA265@tv-sign.ru> (raw)
In-Reply-To: <20070423103833.GB25144@in.ibm.com>
On 04/23, Gautham R Shenoy wrote:
>
> On Sat, Apr 21, 2007 at 01:12:09AM +0400, Oleg Nesterov wrote:
> > On 04/19, Gautham R Shenoy wrote:
> > >
> > > @@ -63,12 +74,16 @@ void refrigerator(void)
> > > recalc_sigpending(); /* We sent fake signal, clean it up */
> > > spin_unlock_irq(¤t->sighand->siglock);
> > >
> > > + task_lock(current);
> > > for (;;) {
> > > set_current_state(TASK_UNINTERRUPTIBLE);
> > > if (!frozen(current))
> > > break;
> > > + task_unlock(current);
> > > schedule();
> > > + task_lock(current);
> > > }
> > > + task_unlock(current);
> > > pr_debug("%s left refrigerator\n", current->comm);
> > > current->state = save;
> >
> > Just curious, why this change?
>
> This can race with hold_freezer_for_task() calling thaw_process. Earlier
> thaw_process(p) was called only after the process 'p' was frozen.
> Now with hold_freezer_for_task(), we can as well call thaw_process(p)
> when 'p' is in the freezing stage. Hence the task_lock.
hold_freezer_for_task()->thaw_process(p) will wake up the task. Or the
caller of refrigerator will notice "!frozen()". Note that refrigerator()
sets PF_FROZEN under task_lock().
In fact we have the same issue when thaw_tasks()->thaw_process(p) happens
when the freezing fails. In that case 'p' may be not frozen.
> > Also, you are planning to add different freezing states (FE_HOTPLUG_CPU,
> > FE_SUSPEND, etc). In that case each of them needs a separate .count, because
> > it should be negative when try_to_freeze_tasks() returns. Now consider
> > the case when we are doing freeze_processes(FE_A | FE_B) ...
>
> So can't we in that case find out the weight of the freeze_event variable and
> subtract that weight from the count (if the count is <=0 ) ?
Probably yes... but if we are speaking about kthrad_stop() only, this could
be afaics solved in more simple way, as Rafael suggests.
Oleg.
next prev parent reply other threads:[~2007-04-23 18:40 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-19 12:01 [RFC 0/2] Fix Freezer related races Gautham R Shenoy
2007-04-19 12:02 ` [RFC PATCH 1/2] Fix PF_NOFREEZE and freezeable race Gautham R Shenoy
2007-04-19 21:39 ` Rafael J. Wysocki
2007-04-20 18:02 ` Oleg Nesterov
2007-04-23 10:26 ` Gautham R Shenoy
2007-04-23 17:49 ` Oleg Nesterov
[not found] ` <200704260044.03975.rjw@sisk.pl>
[not found] ` <20070425231638.GH15134@in.ibm.com>
[not found] ` <20070425163409.4f8476c4.akpm@linux-foundation.org>
[not found] ` <20070426060608.GA12892@in.ibm.com>
[not found] ` <20070425231232.302a83f0.akpm@linux-foundation.org>
2007-04-26 13:11 ` [PATCH -mm] Move frozen_process() to kernel/power/process.c Gautham R Shenoy
2007-04-26 12:36 ` Oleg Nesterov
2007-04-26 13:40 ` Gautham R Shenoy
2007-04-19 12:04 ` [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop race Gautham R Shenoy
2007-04-19 21:31 ` Andrew Morton
2007-04-20 8:54 ` Rafael J. Wysocki
2007-04-20 11:05 ` Gautham R Shenoy
2007-04-20 11:59 ` Rafael J. Wysocki
2007-04-20 12:26 ` Gautham R Shenoy
2007-04-20 12:50 ` Rafael J. Wysocki
2007-04-20 17:30 ` Andrew Morton
2007-04-20 18:31 ` Ingo Molnar
2007-04-20 21:13 ` Rafael J. Wysocki
2007-04-22 19:28 ` [RFC][PATCH -mm 0/3] Separate freezer flags Rafael J. Wysocki
2007-04-22 19:33 ` [RFC][PATCH -mm 1/3] Separate freezer from PM code Rafael J. Wysocki
2007-04-23 10:41 ` Pavel Machek
2007-04-22 19:39 ` [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags Rafael J. Wysocki
2007-04-22 21:14 ` Paul Jackson
2007-04-22 22:14 ` Rafael J. Wysocki
2007-04-22 22:31 ` Paul Jackson
2007-04-23 3:18 ` Satyam Sharma
2007-04-23 4:09 ` Satyam Sharma
2007-04-23 14:19 ` Gautham R Shenoy
2007-04-23 18:49 ` Rafael J. Wysocki
2007-04-23 19:06 ` Rafael J. Wysocki
2007-04-23 10:50 ` Pavel Machek
2007-04-23 13:17 ` Gautham R Shenoy
2007-04-23 19:57 ` Rafael J. Wysocki
2007-04-23 22:23 ` Oleg Nesterov
2007-04-23 22:40 ` Rafael J. Wysocki
2007-04-23 22:41 ` Gautham R Shenoy
2007-04-23 22:55 ` Rafael J. Wysocki
2007-04-23 22:55 ` Oleg Nesterov
2007-04-23 23:10 ` Rafael J. Wysocki
2007-04-23 23:19 ` Oleg Nesterov
2007-04-24 11:32 ` Rafael J. Wysocki
2007-04-22 19:40 ` [RFC][PATCH -mm 3/3] freezer: Fix problem with kthread_stop Rafael J. Wysocki
2007-04-23 10:40 ` Pavel Machek
2007-04-23 19:50 ` Rafael J. Wysocki
2007-04-23 12:35 ` Gautham R Shenoy
2007-04-23 19:03 ` Oleg Nesterov
2007-04-23 20:05 ` Rafael J. Wysocki
2007-04-23 19:55 ` Rafael J. Wysocki
2007-04-23 20:46 ` Oleg Nesterov
2007-04-23 21:16 ` Gautham R Shenoy
2007-04-23 21:30 ` Rafael J. Wysocki
2007-04-20 21:20 ` [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop race Oleg Nesterov
2007-04-20 21:45 ` Rafael J. Wysocki
2007-04-20 10:46 ` Gautham R Shenoy
2007-04-21 9:37 ` Pavel Machek
2007-04-20 21:12 ` Oleg Nesterov
2007-04-23 10:38 ` Gautham R Shenoy
2007-04-23 18:39 ` Oleg Nesterov [this message]
2007-04-23 20:34 ` Gautham R Shenoy
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=20070423183956.GA265@tv-sign.ru \
--to=oleg@tv-sign.ru \
--cc=akpm@linux-foundation.org \
--cc=ego@in.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulmck@us.ibm.com \
--cc=pavel@ucw.cz \
--cc=rjw@sisk.pl \
--cc=vatsa@in.ibm.com \
/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.