* Paul E. McKenney <paul...@linux.vnet.ibm.com> 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! ;-) Thanks, Ingo