Re: [RFC GIT PULL, v2] RCU changes for v4.12

From: Linus Torvalds
Date: Wed May 10 2017 - 13:27:43 EST


On Tue, May 9, 2017 at 12:26 AM, Ingo Molnar <mingo@xxxxxxxxxx> wrote:
>
> The main changes are:

So I've pulled it now (although it is showing signs of semantic
conflicts, so I'll have to look at those), but I've got two requests,
one for Ingo, one for Paul.

Ingo: please don't bother sending me stupid crap.

And by that I mean the whole patch WHEN IT IS 300kB IN SIZE!

That's just idiotic. Nobody is ever going to review a 300kB patch that
is ~7500 lines. All it does is waste time, and make it a pain to even
reply to your emails (since I have "include quoted original" on by
default in order to be able to quote and reply sanely).

There's a reason "git request-pull" only does the diffstat and the shortlog.

So please fix your scripts. If a patch is so big that is is not worth
reviewing, don't include it. I don't know exactly where that limit is,
but I would suggest that it is on the order of 1000 lines or so.

This is particularly annoying, because your pull request is one huge
pile of shit. It has all that completely useless stuff that nobody is
ever going to look at, and it didn't actually mention the *important*
parts, namely how the RCU changes apparently mess with the DRM
selftest changes.

So stop sending me stupid crap, and please send me the *relevant* stuff instead.

> - Debloat RCU headers
>
> - Parallelize SRCU callback handling (plus overlapping patches)
>
> - Improve the performance of Tree SRCU on a CPU-hotplug stress test

And for Paul: the RCU subsystem is starting to get ridiculous. Seriously.

That is *particularly* true for srcu. We don't even have all that many
users, and I suspect a large subset of those users are just crap to
begin with. The biggest reason for srcu seems to be bad callbacks,
particularly shit like the mmu notifier code. Things that we probably
shouldn't have done in the first place, and where srcu just encouraged
people to do bad things.

Seriously, do this:

git grep srcu.*lock -- :^Documentation/ :^kernel/rcu/

and notice that we have only a few hundred lines in the kernel that do
srcu locking. kvm seems to be the main big user.

This annoys me, because the main reason people use srcu is bad design
and lazyness, where they can't be arsed to try to minimize locking and
sleeping things. The "sleeping callbacks" in particular tend to be a
huge design mistake.

Yet, despite this fairly limited use, rscu seems to be just growing
and bloating, and making more and more excuses fro bad behavior.

And it was *years* since I asked you to look at getting rid of the
absolutely insane proliferations of different RCU models. I don't
think anything ever happened. We *still* have TREE_RCU,| PREEMPT_RCU,
and TINY_SRCU.

And with this pull request we now have CLASSIC_SRCU, TINY_SRCU,
TREE_SRCU and TASKS_RCU.

That's in addition to all the other insane tweaks that nobody uses (eg
RCU_FANOUT etc) and that I made sure got removed from any sane
questionnaire.

Paul, this really needs to stop.

I'm now going to stop pulling any more crazy RCU crap. Seriously. If
the RCU subsystem doesn't start shrinking, I'm no longer pulling. Send
me fixes, but don't send me more of this crazy stuff.

So this is me putting my foot down. I should have done it long ago.
I'm done with crazy. Don't waste your time doing yet another RCU mode,
because I will not take it. And don't waste your time expanding on the
existing ones without looking at which of those things can be removed.

Linus