linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Colin Cross <ccross@android.com>
Cc: "Linux PM list" <linux-pm@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	"Arve Hjønnevåg" <arve@android.com>,
	"Oleg Nesterov" <oleg@redhat.com>,
	"Len Brown" <len.brown@intel.com>, "Pavel Machek" <pavel@ucw.cz>,
	"Jeff Layton" <jlayton@redhat.com>,
	"Mandeep Baines" <msb@chromium.org>
Subject: Re: [PATCH v2 03/10] freezer: add new freezable helpers using freezer_do_not_count()
Date: Thu, 2 May 2013 21:09:34 -0700	[thread overview]
Message-ID: <20130503040934.GA16968@mtj.dyndns.org> (raw)
In-Reply-To: <CAMbhsRTSCW3WOxTgw8btk2yWAucqNmyY-Sc+CHsHmZzf6ZsTNA@mail.gmail.com>

Hello,

On Thu, May 02, 2013 at 07:41:39PM -0700, Colin Cross wrote:
> On Thu, May 2, 2013 at 7:16 PM, Colin Cross <ccross@android.com> wrote:
> > This sounds the same as what ended up getting reverted in
> > https://lkml.org/lkml/2013/3/4/221
> > I can add the WARN_ON_ONCE to all my new calls, and leave them out of
> > existing calls, but that seems a little odd, and will be redundant if
> > the lockdep call in try_to_freeze goes back in in 3.11.  Do you still
> > want it in the new apis?
...
> I could also put the lockdep check that was reveted back into
> try_to_freeze(), and add a freezable_schedule_unsafe() that skips it
> for use in the known-unsafe users in nfs, with a big comment not to
> add new users of it.

Oh yeah, that sounds like a good idea, and as for the non-ugly
variants, at least in the mid/long term, I think it'd be best to add
the lockdep annotation to try_to_freeze() with
__try_to_freeze_unsafe_youre_gonna_burn_in_hell_if_you_use_this() for
the existing users which should be gradually converted, but if that's
too burdensome, adding warnings to the wrappers should do for now, I
guess.

And I *hope* the lockdep annotation is stricter than what was added
before.  I think it better be "no lock ever should be held at this
point" rather than "consider this a big lock".  I'm not sure how much
consensus we have on this but I'd like to, in the longer term, merge
freezer into job control stop so that frozen tasks don't appear as
being in uninterruptible sleep.  Currently, the frozen tasks are
essentially in UNINTERRUPTIBLE sleep which is okay for suspend but for
cgroup freezer, it sucks.  You end up with tasks which you can't even
kill.

Combined with the locking problems, I was planning to update the
freezer such that the frozen state is implemented as a form of jobctl
stop, so that things like ptrace / kill -9 could work on them and we
also have the clear definition of the frozen state rather than the
current "it may get stuck somewhere in the kernel".

But that conflicts with what you're doing here which seems pretty
useful, so, to satisfy both goals, when somebody needs to put a
pseudo-frozen task into the actual frozen jobctl stop, those spots
which are currently using try_to_stop() would have to return an error,
most likely -EINTR with TIF_SIGPENDING set, and the control should
return towards userland so that signal handling path can be invoked.
ie. It should be possible to steer the tasks which are considered
frozen but not in the frozen jobctl stop into the jobctl stop without
any side effect.  To do that, those spots basically have to be pretty
close to the userland boundary where it can easily leave the kernel
with -EINTR and AFAICS all the spots that you converted are like that
(which I think is natural).  While not holding any locks doesn't
guarantee that, I think there'd be a fairly high correlation at least
and it'd be able to drive people towards finding out what's going on.

So, that's my agenda.  Not sure how many actually agree with it.
Rafael, Oleg, Jeff?

Thanks.

-- 
tejun

  reply	other threads:[~2013-05-03  4:09 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-02  1:34 [PATCH v2 00/10] optimize freezing tasks by reducing task wakeups Colin Cross
2013-05-02  1:34 ` [PATCH v2 01/10] freezer: shorten freezer sleep time using exponential backoff Colin Cross
2013-05-02 23:20   ` Tejun Heo
2013-05-02  1:35 ` [PATCH v2 02/10] freezer: skip waking up tasks with PF_FREEZER_SKIP set Colin Cross
2013-05-02 23:24   ` Tejun Heo
2013-05-03  9:24   ` Pavel Machek
2013-05-02  1:35 ` [PATCH v2 03/10] freezer: add new freezable helpers using freezer_do_not_count() Colin Cross
2013-05-02 23:55   ` Tejun Heo
2013-05-03  0:03     ` Tejun Heo
2013-05-03  2:16       ` Colin Cross
2013-05-03  2:41         ` Colin Cross
2013-05-03  4:09           ` Tejun Heo [this message]
2013-05-03  4:12             ` Tejun Heo
2013-05-03  4:17             ` Colin Cross
2013-05-03  4:20               ` Tejun Heo
2013-05-03 14:18             ` Alan Stern
2013-05-03 16:54               ` Tejun Heo
2013-05-02  1:35 ` [PATCH v2 04/10] binder: use freezable blocking calls Colin Cross
2013-05-02  1:35 ` [PATCH v2 05/10] epoll: use freezable blocking call Colin Cross
2013-05-02  1:35 ` [PATCH v2 06/10] select: " Colin Cross
2013-05-02  1:35 ` [PATCH v2 07/10] futex: " Colin Cross
2013-05-02 19:45   ` Thomas Gleixner
2013-05-03  3:12     ` Darren Hart
2013-06-25 21:15   ` [tip:core/locking] futex: Use " tip-bot for Colin Cross
2013-05-02  1:35 ` [PATCH v2 08/10] nanosleep: use " Colin Cross
2013-05-02 19:46   ` Thomas Gleixner
2013-05-02  1:35 ` [PATCH v2 09/10] sigtimedwait: " Colin Cross
2013-05-02  1:35 ` [PATCH v2 10/10] af_unix: use freezable blocking calls in read Colin Cross
2013-05-03  0:08   ` Tejun Heo
2013-05-04 19:19     ` Rafael J. Wysocki
2013-05-04 20:39       ` Tejun Heo
2013-05-04 22:23         ` Colin Cross
2013-05-05 11:23           ` Rafael J. Wysocki
2013-05-02 21:06 ` [PATCH v2 00/10] optimize freezing tasks by reducing task wakeups Rafael J. Wysocki
2013-05-03  0:10   ` Tejun Heo
2013-05-03 11:43     ` 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=20130503040934.GA16968@mtj.dyndns.org \
    --to=tj@kernel.org \
    --cc=arve@android.com \
    --cc=ccross@android.com \
    --cc=jlayton@redhat.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=msb@chromium.org \
    --cc=oleg@redhat.com \
    --cc=pavel@ucw.cz \
    --cc=rjw@sisk.pl \
    /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;
as well as URLs for NNTP newsgroup(s).