Re: [GIT PULL rcu/next] RCU commits for 4.6

From: Paul E. McKenney
Date: Tue Mar 08 2016 - 10:25:10 EST


On Tue, Mar 08, 2016 at 09:53:42AM +0100, Ingo Molnar wrote:
>
> * Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> wrote:
>
> > Hello, Ingo,
> >
> > Note that this series conflicts with some commits in Thomas Gleixner's
> > hotplug series and in Daniel Wagner's swait series, both of which are in
> > -tip. I have suggested conflict-resolution commits for Daniel's commits
> > (25f0d48a4299 "Merge commit 'abedf8e2419fb873d919dd74de2e84b510259339'
> > into wagi.2016.03.01a") and for Thomas's commits (dc96aeda643f "Merge
> > commit '27d50c7eeb0f' into wagi.2016.03.01a"), which you might find
> > useful. These merge commits pass rcutorture testing, 0day robot testing,
> > and -next testing.
> >
> > The changes in this series include:
> >
> > 1. Documentation updates, including RCU data structure design-level
> > documentation.
> >
> > https://lkml.org/lkml/2016/2/24/26
> >
> > 2. Miscellaneous fixes.
> >
> > https://lkml.org/lkml/2016/2/24/34
> >
> > 3. Torture-test updates.
> >
> > https://lkml.org/lkml/2016/2/24/50
> >
> > As noted earlier, all of these changes have been subjected to 0day Test
> > robot and -next testing, and are available in the git repository at:
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git for-mingo
> >
> > for you to fetch changes up to 2863b4e3dd92a9d697dd66b219710e478e0a4531:
> >
> > Merge branches 'doc.2015.02.23a', 'fixes.2015.02.23a' and 'torture.2015.02.23a' into HEAD (2016-02-23 20:05:19 -0800)
> >
> > ----------------------------------------------------------------
> > Boqun Feng (3):
> > sparse: Add __private to privatize members of structs
> > RCU: Privatize rcu_node::lock
> > irq: Privatize irq_common_data::state_use_accessors
> >
> > Chen Gang (1):
> > rcu: Remove useless rcu_data_p when !PREEMPT_RCU
> >
> > Paul E. McKenney (25):
> > rcutorture: Add checks for rcutorture writer starvation
> > rcutorture: Don't keep empty console.log.diags files
> > rcutorture: Check for self-detected stalls
> > documentation: Add real-time requirements from CPU-bound workloads
> > documentation: Fix control dependency and identical stores
> > documentation: Fix memory-barriers.txt section references
> > documentation: Add synchronize_rcu_mult() to the requirements
> > documentation: Remove obsolete reference to RCU-protected indexes
> > documentation: Subsequent writes ordered by rcu_dereference()
> > documentation: Distinguish between local and global transitivity
> > documentation: Add alternative release-acquire outcome
> > documentation: Add documentation for RCU's major data structures
> > documentation: Explain why rcu_read_lock() needs no barrier()
> > documentation: Transitivity is not cumulativity
> > documentation: Document illegality of call_rcu() from offline CPUs
> > documentation: Explain how RCU's combining tree fights contention
> > rcu: Assign false instead of 0 for ->core_needs_qs
> > rcu: Update rcu_report_qs_rsp() comment
> > rcu: Stop treating in-kernel CPU-bound workloads as errors
> > rcu: Set rdp->gpwrap when CPU is idle
> > rcutorture: Correct no-expedite console messages
> > rcu: Document unique-name limitation for DEFINE_STATIC_SRCU()
> > rcu: Catch up rcu_report_qs_rdp() comment with reality
> > rcu: Export rcu_gp_is_normal()
> > Merge branches 'doc.2015.02.23a', 'fixes.2015.02.23a' and 'torture.2015.02.23a' into HEAD
> >
> > Paul Gortmaker (1):
> > rcu: Make rcu/tiny_plugin.h explicitly non-modular
> >
> > SeongJae Park (1):
> > documentation: Clarify compiler store-fusion example
> >
> > Yang Shi (1):
> > rcu: Remove rcu_user_hooks_switch
> >
> > .../Design/Data-Structures/BigTreeClassicRCU.svg | 474 +++++++
> > .../Design/Data-Structures/BigTreeClassicRCUBH.svg | 499 +++++++
> > .../Data-Structures/BigTreeClassicRCUBHdyntick.svg | 695 ++++++++++
> > .../Data-Structures/BigTreePreemptRCUBHdyntick.svg | 741 +++++++++++
> > .../BigTreePreemptRCUBHdyntickCB.svg | 858 ++++++++++++
> > .../Design/Data-Structures/Data-Structures.html | 1395 ++++++++++++++++++++
> > .../Design/Data-Structures/Data-Structures.htmlx | 1295 ++++++++++++++++++
> > .../Design/Data-Structures/HugeTreeClassicRCU.svg | 939 +++++++++++++
> > .../RCU/Design/Data-Structures/TreeLevel.svg | 828 ++++++++++++
> > .../RCU/Design/Data-Structures/TreeMapping.svg | 305 +++++
> > .../Design/Data-Structures/TreeMappingLevel.svg | 380 ++++++
> > .../RCU/Design/Data-Structures/blkd_task.svg | 843 ++++++++++++
> > .../RCU/Design/Data-Structures/nxtlist.svg | 396 ++++++
> > .../RCU/Design/Requirements/Requirements.html | 225 +++-
> > .../RCU/Design/Requirements/Requirements.htmlx | 121 +-
> > Documentation/memory-barriers.txt | 141 +-
> > include/linux/compiler.h | 12 +-
> > include/linux/irq.h | 6 +-
> > include/linux/rcupdate.h | 2 -
> > include/linux/srcu.h | 19 +-
> > kernel/irq/internals.h | 4 +
> > kernel/rcu/rcutorture.c | 14 +-
> > kernel/rcu/tiny_plugin.h | 15 +-
> > kernel/rcu/tree.c | 143 +-
> > kernel/rcu/tree.h | 42 +-
> > kernel/rcu/tree_plugin.h | 27 +-
> > kernel/rcu/update.c | 1 +
> > scripts/checkpatch.pl | 3 +-
> > .../selftests/rcutorture/bin/parse-console.sh | 6 +-
> > 29 files changed, 10233 insertions(+), 196 deletions(-)
> > create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreeClassicRCU.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBH.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBHdyntick.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntick.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntickCB.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/Data-Structures.html
> > create mode 100644 Documentation/RCU/Design/Data-Structures/Data-Structures.htmlx
> > create mode 100644 Documentation/RCU/Design/Data-Structures/HugeTreeClassicRCU.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/TreeLevel.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/TreeMapping.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/TreeMappingLevel.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/blkd_task.svg
> > create mode 100644 Documentation/RCU/Design/Data-Structures/nxtlist.svg
>
> Pulled, thanks a lot Paul!
>
> So I've done the conflict resolutions with tmp:smp/hotplug and tip:sched/core
> myself, and came up with a mostly identical resolution, except this difference
> with your resolution in wagi.2016.03.01a:
>
> --- linux-next/kernel/rcu/tree.c
> +++ tip/kernel/rcu/tree.c
> @@ -2046,8 +2046,8 @@ static void rcu_gp_cleanup(struct rcu_st
> /* smp_mb() provided by prior unlock-lock pair. */
> nocb += rcu_future_gp_cleanup(rsp, rnp);
> sq = rcu_nocb_gp_get(rnp);
> - raw_spin_unlock_irq_rcu_node(rnp);
> rcu_nocb_gp_cleanup(sq);
> + raw_spin_unlock_irq_rcu_node(rnp);
> cond_resched_rcu_qs();
> WRITE_ONCE(rsp->gp_activity, jiffies);
> rcu_gp_slow(rsp, gp_cleanup_delay);
>
> but your resolution is better, rcu_nocb_gp_cleanup() can (and should) be done
> outside of the rcu_node lock.
>
> So we have the same resolution now, which is good! ;-)

Glad we were close!

Just for purposes of satisfying curiosity, I am running rcutorture on your
version. ;-)

Thanx, Paul