Hello, Ingo, This pull request contains the following changes: 1. RCU flavor consolidation cleanups and optmizations. http://lkml.kernel.org/r/20190530145204.GA28526@xxxxxxxxxxxxx 2. Documentation updates. http://lkml.kernel.org/r/20190530145504.GA29820@xxxxxxxxxxxxx 3. Miscellaneous fixes. http://lkml.kernel.org/r/20190530145942.GA30318@xxxxxxxxxxxxx 4. SRCU updates. http://lkml.kernel.org/r/20190530150347.GA31311@xxxxxxxxxxxxx 5. RCU-sync flavor consolidation. http://lkml.kernel.org/r/20190530150816.GA32130@xxxxxxxxxxxxx 6. Torture-test updates. http://lkml.kernel.org/r/20190530151650.GA422@xxxxxxxxxxxxx 7. Linux-kernel memory-consistency-model updates, most notably the addition of plain C-language accesses. http://lkml.kernel.org/r/20190530144202.GA26201@xxxxxxxxxxxxx http://lkml.kernel.org/r/Pine.LNX.4.44L0.1906201151210.1512-100000@xxxxxxxxxxxxxxxxxxxx http://lkml.kernel.org/r/Pine.LNX.4.44L0.1906201152370.1512-100000@xxxxxxxxxxxxxxxxxxxx http://lkml.kernel.org/r/Pine.LNX.4.44L0.1906201153470.1512-100000@xxxxxxxxxxxxxxxxxxxx These last three were relatively late additions responding to LKML feedback. However, the resulting memory model passes its rather large library of tests, and these changes are furthermore required to correctly model some tricky situations involving use of RCU without rcu_assign_pointer() and rcu_dereference(). These tricky sequences are not theoretical in nature, but rather from fixes identified by Herbert Xu. It therefore seems best to get these upstream sooner rather than later. 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 b989ff070574ad8b8621d866de0a8e9a65d42c80: Merge LKMM and RCU commits (2019-06-24 09:12:39 -0700) These changes do increase the size of the kernel by about 300 lines. About 150 of this was due largely to improvements in rcutorture's forward-progress testing. Not quite another 100 of this was due to allowing Tree SRCU to be used from modules without needing to adjust the size of the reserved region. Not quite an additional 100 of this was for cleanups after the RCU flavor consolidation effort, including accidentally fixing a self-deadlock encountered by Sebastian Siewior when booting with the threadirqs kernel parameter. Finally, yet another not quite 100 of this was for adding LKMM's support for plain C-language accesses. This totals to more than 300 because other changes removed code. ---------------------------------------------------------------- Alan Stern (7): tools/memory-model: Prepare for data-race detection tools/memory-model: Add definitions of plain and marked accesses tools/memory-model: Add data-race detection Documentation: atomic_t.txt: Explain ordering provided by smp_mb__{before,after}_atomic() tools/memory-model: Expand definition of barrier tools/memory-model: Change definition of rcu-fence tools/memory-model: Improve data-race detection Andrea Parri (3): rcu: Don't return a value from rcu_assign_pointer() tools/memory-model: Fix comment in MP+poonceonces.litmus tools/memory-model: Do not use "herd" to refer to "herd7" Jiang Biao (2): rcu: Remove unused rdp local from synchronize_rcu_expedited() rcu: Make __call_srcu static Joel Fernandes (Google) (7): lockdep: Add assertion to check if in an interrupt rcu: Add checks for dynticks counters in rcu_is_cpu_rrupt_from_idle() doc/rcuref: Document real world examples in kernel srcu: Remove unused vmlinux srcu linker entries module: Make srcu_struct ptr array as read-only rcutorture: Select from only online CPUs rcutorture: Add cpu0 to the set of CPUs to add jitter Neeraj Upadhyay (2): rcu: Dump specified number of blocked tasks rcu: Correctly unlock root node in rcu_check_gp_start_stall() Oleg Nesterov (4): rcu/sync: Kill rcu_sync_type/gp_type uprobes: Use DEFINE_STATIC_PERCPU_RWSEM() to initialize dup_mmap_sem locking/percpu-rwsem: Add DEFINE_PERCPU_RWSEM(), use it to initialize cgroup_threadgroup_rwsem rcu/sync: Simplify the state machine Paul E. McKenney (34): rcu: Check for wakeup-safe conditions in rcu_read_unlock_special() rcu: Only do rcu_read_unlock_special() wakeups if expedited rcu: Allow rcu_read_unlock_special() to raise_softirq() if in_irq() rcu: Use irq_work to get scheduler's attention in clean context rcu: Inline invoke_rcu_callbacks() into its sole remaining caller rcu: Avoid self-IPI in sync_rcu_exp_select_node_cpus() rcu: Avoid self-IPI in sync_sched_exp_online_cleanup() rcu: Rename rcu_data's ->deferred_qs to ->exp_deferred_qs rcu: Make kfree_rcu() ignore NULL pointers rcu: Set a maximum limit for back-to-back callback invocation doc: Remove ".vnet" from paulmck email addresses srcu: Allocate per-CPU data for DEFINE_SRCU() in modules rcutorture: Add cond_resched() to forward-progress free-up loop rcutorture: Fix stutter_wait() return value and freelist checks torture: Allow inter-stutter interval to be specified torture: Make kvm-find-errors.sh and kvm-recheck.sh provide exit status rcutorture: Provide rudimentary Makefile rcutorture: Exempt tasks RCU from timely draining of grace periods rcutorture: Exempt TREE01 from forward-progress testing rcutorture: Give the scheduler a chance on PREEMPT && NO_HZ_FULL kernels rcutorture: Halt forward-progress checks at end of run rcutorture: Add trivial RCU implementation torture: Capture qemu output torture: Add function graph-tracing cheat sheet torture: Run kernel build in source directory torture: Make --cpus override idleness calculations torture: Add --trust-make to suppress "make clean" rcutorture: Dump trace buffer for callback pipe drain failures torture: Suppress propagating trace_printk() warning rcutorture: Upper case solves the case of the vanishing NULL pointer rcu: Upgrade sync_exp_work_done() to smp_mb() rcu: Fix irritating whitespace error in rcu_assign_pointer() Merge branches 'consolidate.2019.05.28a', 'doc.2019.05.28a', 'fixes.2019.06.13a', 'srcu.2019.05.28a', 'sync.2019.05.28a' and 'torture.2019.05.28a' into HEAD Merge LKMM and RCU commits Sebastian Andrzej Siewior (2): rcu: Enable elimination of Tree-RCU softirq processing rcutorture: Tweak kvm options Waiman Long (1): rcu: Force inlining of rcu_read_lock() Zhenzhong Duan (1): doc: Fixup definition of rcupdate.rcu_task_stall_timeout Documentation/RCU/rcuref.txt | 21 +- Documentation/RCU/stallwarn.txt | 2 +- Documentation/RCU/whatisRCU.txt | 8 +- Documentation/admin-guide/kernel-parameters.txt | 6 + Documentation/atomic_t.txt | 17 +- Documentation/core-api/circular-buffers.rst | 2 +- Documentation/memory-barriers.txt | 2 +- .../translations/ko_KR/memory-barriers.txt | 2 +- include/linux/lockdep.h | 7 + include/linux/module.h | 5 + include/linux/percpu-rwsem.h | 10 +- include/linux/rcu_sync.h | 40 ++-- include/linux/rcupdate.h | 21 +- include/linux/sched.h | 2 +- include/linux/srcutree.h | 14 +- include/linux/torture.h | 2 +- kernel/cgroup/cgroup.c | 3 +- kernel/events/uprobes.c | 4 +- kernel/locking/locktorture.c | 2 +- kernel/locking/percpu-rwsem.c | 2 +- kernel/module.c | 5 + kernel/rcu/rcu.h | 5 + kernel/rcu/rcutorture.c | 96 +++++++-- kernel/rcu/srcutree.c | 69 ++++++- kernel/rcu/sync.c | 214 ++++++++++----------- kernel/rcu/tree.c | 164 +++++++++++++--- kernel/rcu/tree.h | 6 +- kernel/rcu/tree_exp.h | 53 +++-- kernel/rcu/tree_plugin.h | 195 ++++++------------- kernel/rcu/tree_stall.h | 4 +- kernel/rcu/update.c | 13 ++ kernel/torture.c | 23 ++- tools/include/linux/rcu.h | 4 +- tools/memory-model/linux-kernel.bell | 6 + tools/memory-model/linux-kernel.cat | 102 +++++++--- tools/memory-model/linux-kernel.def | 1 + .../litmus-tests/MP+poonceonces.litmus | 2 +- tools/memory-model/litmus-tests/README | 2 +- tools/memory-model/lock.cat | 2 +- tools/memory-model/scripts/README | 4 +- tools/memory-model/scripts/checkalllitmus.sh | 2 +- tools/memory-model/scripts/checklitmus.sh | 2 +- tools/memory-model/scripts/parseargs.sh | 2 +- tools/memory-model/scripts/runlitmushist.sh | 2 +- tools/testing/radix-tree/linux/rcupdate.h | 2 +- tools/testing/selftests/rcutorture/Makefile | 3 + .../testing/selftests/rcutorture/bin/configinit.sh | 39 ++-- tools/testing/selftests/rcutorture/bin/cpus2use.sh | 5 + .../testing/selftests/rcutorture/bin/functions.sh | 13 +- tools/testing/selftests/rcutorture/bin/jitter.sh | 13 +- .../testing/selftests/rcutorture/bin/kvm-build.sh | 9 +- .../selftests/rcutorture/bin/kvm-find-errors.sh | 3 + .../selftests/rcutorture/bin/kvm-recheck.sh | 13 +- .../selftests/rcutorture/bin/kvm-test-1-run.sh | 23 +-- tools/testing/selftests/rcutorture/bin/kvm.sh | 14 +- .../selftests/rcutorture/bin/parse-build.sh | 2 +- .../selftests/rcutorture/bin/parse-console.sh | 1 + .../selftests/rcutorture/configs/rcu/CFcommon | 3 + .../selftests/rcutorture/configs/rcu/TREE01.boot | 1 + .../selftests/rcutorture/configs/rcu/TRIVIAL | 14 ++ .../selftests/rcutorture/configs/rcu/TRIVIAL.boot | 3 + 61 files changed, 845 insertions(+), 466 deletions(-) create mode 100644 tools/testing/selftests/rcutorture/Makefile create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TRIVIAL create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TRIVIAL.boot