From: Peter Zijlstra <peterz@infradead.org>
To: Pavel Machek <pavel@ucw.cz>
Cc: len.brown@intel.com, linux-kernel@vger.kernel.org,
tglx@linutronix.de, mingo@kernel.org,
torvalds@linux-foundation.org, rjw@rjwysocki.net, hpa@zytor.com,
linux-tip-commits@vger.kernel.org
Subject: Re: [tip:sched/core] sched/wait: Reimplement wait_event_freezable()
Date: Wed, 5 Nov 2014 09:18:38 +0100 [thread overview]
Message-ID: <20141105081838.GN10501@worktop.programming.kicks-ass.net> (raw)
In-Reply-To: <20141104201203.GA15071@amd>
On Tue, Nov 04, 2014 at 09:12:03PM +0100, Pavel Machek wrote:
> Hi!
>
> > Commit-ID: 36df04bc5273a046f53b5e359febc1225f85aa7b
> > Gitweb: http://git.kernel.org/tip/36df04bc5273a046f53b5e359febc1225f85aa7b
> > Author: Peter Zijlstra <peterz@infradead.org>
> > AuthorDate: Wed, 29 Oct 2014 12:21:57 +0100
> > Committer: Ingo Molnar <mingo@kernel.org>
> > CommitDate: Tue, 4 Nov 2014 07:17:45 +0100
> >
> > sched/wait: Reimplement wait_event_freezable()
> >
> > Provide better implementations of wait_event_freezable() APIs.
> >
> > The problem is with freezer_do_not_count(), it hides the thread from
> > the freezer, even though this thread might not actually freeze/sleep
> > at all.
>
> Can you elaborate?
>
> The thread will be in freezer_do_not_count() area, but it is just
> waiting for event there, it should not do much damage.
There are wait_event()s for which the cond expands to quite a lot of
code. This code can still be running while the freezer reports success.
This can happen because we're hidden by the do_not_count logic.
Also, I initially overlooked that freezer_count() did a try_to_freeze().
> If this is bugfix, should it be cc-ed to stable?
Its not a bugfix per se, the issue above is rare and extremely hard to
hit, esp since the freezer tries multiple times before giving up. But
its a theoretical possibility.
> Did you test it with suspend/hibernation? Because I can't really see
> how it works.
It calls try_to_freeze() after each schedule(). But no, I've not
actually tried.
If we're stuck in the schedule, waiting for the event, freeze_task()
will wake us up and then we'll find freeing() true and call into
__refrigerator().
If we're not stuck in schedule() we're running and the freezer
can see us running and will wait for us to hit another freeze point.
> > +#define __wait_event_freezable(wq, condition) \
> > + ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \
> > + schedule(); try_to_freeze())
> > +
> _Three_ underscores. And two underscore version exists, too,
> fortunately it at least has different number of arguments.
Hehe, yeah, there was a discount on underscores that day. The double
underscore variants can be used in code along with the no underscores
variants. The tripple one is implementation goo.
next prev parent reply other threads:[~2014-11-05 8:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-04 16:08 [tip:sched/core] sched/wait: Reimplement wait_event_freezable() tip-bot for Peter Zijlstra
2014-11-04 20:12 ` Pavel Machek
2014-11-05 8:18 ` Peter Zijlstra [this message]
2014-11-13 14:03 ` Pavel Machek
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=20141105081838.GN10501@worktop.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=hpa@zytor.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=pavel@ucw.cz \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/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