From: Pierre Habouzit <pierre.habouzit@intersec.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, Avi Kivity <avi@qumranet.com>,
Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH] sched: allow preempt notifiers to self-unregister.
Date: Fri, 16 Dec 2011 18:42:16 +0100 [thread overview]
Message-ID: <20111216174216.GC4569@madism.org> (raw)
In-Reply-To: <1324056787.18942.118.camel@twins>
On Fri, Dec 16, 2011 at 06:33:07PM +0100, Peter Zijlstra wrote:
> On Fri, 2011-12-16 at 18:25 +0100, Pierre Habouzit wrote:
> > On Fri, Dec 16, 2011 at 06:09:45PM +0100, Peter Zijlstra wrote:
> > > On Fri, 2011-12-16 at 17:15 +0100, Pierre Habouzit wrote:
> > > > Hence I install those callbacks for the thread registering themselves
> > > > and want to keep them until the thread dies. Sadly I have no way to
> > > > unregister those callbacks right now, but for horrible hacks (involving
> > > > private delayed queues processed regularly walked to kfree() the
> > > > structures referencing pids that are dead, urgh).
> > >
> > > kfree_rcu() is the 'normal' way to cheat your way out of this.
> >
> > Hmm, if when I'm scheduled "out" with the TASK_DEAD bit set, am I sure
> > the _in/_out callback will never ever be called again?
>
> Yep.
Good then kfree_rcu (or call_rcu if I need more at some point) is good
enough, which is nice because it will allow me to run on "any" kernel
whether my patch is ever applied or not.
> > It experimentally seems that the answer is yes, but I'm not familiar
> > enough with the scheduler to be a 100% sure. If yes then kfree_rcu is
> > just fine indeed and I don't need the patch, at all.
> >
> > If it's not "sure" then I assume I can probably use call_rcu() but that
>
> kfree_rcu() is a convenient macro wrapped around call_rcu().
Yes I've seen, what I meant was a shortcut for "if kfree_rcu isn't
allowed because I may kfree() callbacks still registered and that _in or
_out events could be still fired then I'll write something that safely
unregisters callbacks from a longer call_rcu" :)
I reckon this "shortcut" wasn't obvious for the reader. But I won't need
that since you answered "yes" to my previous question.
> > looks like a total overkill for something that can be fully avoided with
> > my patch, which incidentally, doesn't slow the typical sched path (there
> > should be no callbacks and the _safe iterator exits as fast as the non
> > safe iterator).
>
> Ah, you're right, I thought it frobbed the extra variable too, but
> looking at it it only does that when there's anything on the list.
Yeah that's the reason why I submitted the patch in the first place
since it doesn't change the performance for the usual case. But well,
given your answers, I don't really care whether it's applied or not
anymore, I still find it cumbersome that people couldn't unregister from
a callback, that's really something that I expected to work :) It may be
worth a comment in preempt.h to save some experimenters a kernel panic
or two :P
Thank you for your answers.
(for the story but well, I understand you couldn't care less, it sadly
caused me a kernel panic and 2 subsequent ones because btrfs kind of
didn't like the panics. Okay, I've got the message, I've been a lazy boy
to develop kernel code for almost the first time directly in my running
linux instead of a qemu :P)
--
Intersec <http://www.intersec.com>
Pierre Habouzit <pierre.habouzit@intersec.com> | Chief Software Architect
Tél : +33 (0)1 5570 3346
Mob : +33 (0)6 1636 8131
Fax : +33 (0)1 5570 3332
37 Rue Pierre Lhomme
92400 Courbevoie
next prev parent reply other threads:[~2011-12-16 17:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-16 16:15 [PATCH] sched: allow preempt notifiers to self-unregister Pierre Habouzit
2011-12-16 17:09 ` Peter Zijlstra
2011-12-16 17:25 ` Pierre Habouzit
2011-12-16 17:33 ` Peter Zijlstra
2011-12-16 17:42 ` Pierre Habouzit [this message]
2011-12-18 9:10 ` Avi Kivity
2011-12-19 10:26 ` Pierre Habouzit
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=20111216174216.GC4569@madism.org \
--to=pierre.habouzit@intersec.com \
--cc=avi@qumranet.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.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 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.