From: Ingo Molnar <mingo@kernel.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [GIT PULL] RCU changes for v4.12
Date: Tue, 2 May 2017 09:59:10 +0200 [thread overview]
Message-ID: <20170502075910.d7dl762muvuc5uoh@gmail.com> (raw)
In-Reply-To: <20170502040202.GR3956@linux.vnet.ibm.com>
* Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote:
> On Mon, May 01, 2017 at 06:19:44PM -0700, Linus Torvalds wrote:
> > On Mon, May 1, 2017 at 2:59 AM, Ingo Molnar <mingo@kernel.org> wrote:
> > > Linus,
> > >
> > > Please pull the latest core-rcu-for-linus git tree from:
> > >
> > > git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-rcu-for-linus
> >
> > I pulled this, and then after looking at it, ended up un-pulling it again.
> >
> > I refuse to take that nasty <linux/rcu_segcblist.h> header file from hell.
> >
> > I see absolutely no point in taking a header file of several hundred
> > lines of code.
> >
> > We have traditionally done too much inline code anyway, but we've
> > learnt our lesson - and even back when we did too much of it, we
> > didn't put random code that nobody uses and by definition cannot be
> > performance-critical in big inline functions in header files.
> >
> > If it was some one-liner helper function, that would be one thing. But
> > there are functions that don't even fit on the screen, and that have
> > multiple loops and memory barriers in them.
> >
> > The one function I decided to grep for was used EXACTLY NOWHERE. Yet
> > it was apparently SO INCREDIBLY important that it needed to be inlined
> > in a huge header file despite being huge and complicated.
> >
> > So no. This is too ugly to live, and certainly too ugly to be pulled.
> >
> > The RCU code needs to start showing some good taste.
> >
> > There are valid reasons to inline even large functions, if they have
> > constant arguments that make us expect them to generate a single
> > instruction of code in the end. But that was very much not the case
> > here.
> >
> > Not pulling. Try again next merge window when the code has been
> > cleaned up and isn't too ugly to live.
>
> Please accept my apologies!
>
> I was patterning this code too much after the various *list*.h header
> files, and failed to notice that the functions were getting large.
I too should have noticed the large inline functions when pulling it. :-/
Header file bloat is a creeping problem that has gotten (much) worse over the
last 10 years, so the pushback from Linus against adding more bloat to
include/linux/ is fully justified.
> I will get rid of the unused rcu_segcblist_extract_all() function and create a
> kernel/rcu/segcblist.c for the functions that are either non-trivial or
> performance-insensitive.
>
> Does that cover it, or am I missing something?
I'd also suggest moving as much of the RCU internal data types into kernel/rcu/ as
possible. It's not clear to me which part of it is supposed to be a public API and
which bits are internal. It might make sense to keep it internal for the time
being, and only export things once there are users.
I.e. a pretty good solution would be to move all of include/linux/rcu_segcblist.h
to kernel/rcu/rcu_segcblist.c or so - and do a kernel/rcu/rcu_segcblist.h with the
data types and function prototypes.
There's also appears to be inline functions wrappery that I think obfuscates the
code: for example why is there rcu_cblist_n_cbs()? Users could directly
dereference ->len. Once these are eliminated there's very few inline functions
remaining that should truly be inline.
Thanks,
Ingo
next prev parent reply other threads:[~2017-05-02 7:59 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-01 9:59 [GIT PULL] RCU changes for v4.12 Ingo Molnar
2017-05-02 1:19 ` Linus Torvalds
2017-05-02 4:02 ` Paul E. McKenney
2017-05-02 4:11 ` Linus Torvalds
2017-05-02 4:30 ` Paul E. McKenney
2017-05-02 7:59 ` Ingo Molnar [this message]
2017-05-02 8:31 ` [PATCH] srcu: Debloat the <linux/rcu_segcblist.h> header Ingo Molnar
2017-05-02 10:25 ` Paul E. McKenney
2017-05-02 12:56 ` Paul E. McKenney
2017-05-09 7:26 ` [RFC GIT PULL, v2] RCU changes for v4.12 Ingo Molnar
2017-05-10 17:27 ` Linus Torvalds
2017-05-10 19:54 ` Ingo Molnar
2017-05-10 20:01 ` Linus Torvalds
2017-05-11 6:54 ` Ingo Molnar
2017-05-10 19:54 ` Paul E. McKenney
2017-05-10 20:17 ` Linus Torvalds
2017-05-10 20:51 ` Paul E. McKenney
2017-05-10 21:08 ` Linus Torvalds
2017-05-10 22:53 ` Paul E. McKenney
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=20170502075910.d7dl762muvuc5uoh@gmail.com \
--to=mingo@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--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 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.