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

From: Ingo Molnar
Date: Fri Jun 28 2019 - 13:49:01 EST



* Paul E. McKenney <paulmck@xxxxxxxxxxxxx> wrote:

> 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

Pulled, thanks a lot Paul!

Ingo