[GIT PULL rcu/next + tools/memory-model] RCU and LKMM commits for 5.3

From: Paul E. McKenney
Date: Thu Jun 27 2019 - 18:20:52 EST


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