[GIT PULL] RCU changes for v5.19

From: Paul E. McKenney
Date: Fri May 20 2022 - 14:06:43 EST


Hello, Linus,

Once the merge window opens, please pull the latest RCU git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/rcu.2022.05.19a
# HEAD: ce13389053a347aa9f8ffbfda2238352536e15c9 Merge branch 'exp.2022.05.11a' into HEAD

There are really eight more branches for a total of nine, but the other
eight had to be merged separately as the parent of the above commit here:

be05ee54378d ("Merge branches 'docs.2022.04.20a', 'fixes.2022.04.20a', 'nocb.2022.04.11b', 'rcu-tasks.2022.04.11b', 'srcu.2022.05.03a', 'torture.2022.04.11b', 'torture-tasks.2022.04.20a' and 'torturescript.2022.04.20a' into HEAD")

Stephen Rothwell located a conflict with these two commits, the latter
from the sysctl tree:

95d4e9e339d1 ("rcu: Provide a get_completed_synchronize_rcu() function")
d9ab0e63fa7f ("sched: Move rt_period/runtime sysctls to rt.c")

Stephen's suggested merge-conflict fix works in my testing:

https://lore.kernel.org/all/20220420153746.4790d532@xxxxxxxxxxxxxxxx/

I do not normally pull from the sysctl tree, but if you would like me
to create an example merge, please let me know and I will set one up.

----------------------------------------------------------------
RCU pull request for v5.19

This pull request contains the following branches:

docs.2022.04.20a: Documentation updates.

fixes.2022.04.20a: Miscellaneous fixes.

nocb.2022.04.11b: Callback-offloading updates, mainly simplifications.

rcu-tasks.2022.04.11b: RCU-tasks updates, including some -rt fixups,
handling of systems with sparse CPU numbering, and a fix for a
boot-time race-condition failure.

srcu.2022.05.03a: Put SRCU on a memory diet in order to reduce the size
of the srcu_struct structure.

torture.2022.04.11b: Torture-test updates fixing some bugs in tests and
closing some testing holes.

torture-tasks.2022.04.20a: Torture-test updates for the RCU tasks flavors,
most notably ensuring that building rcutorture and friends does
not change the RCU-tasks-related Kconfig options.

torturescript.2022.04.20a: Torture-test scripting updates.

exp.2022.05.11a: Expedited grace-period updates, most notably providing
milliseconds-scale (not all that) soft real-time response from
synchronize_rcu_expedited(). This is also the first time in
almost 30 years of RCU that someone other than me has pushed
for a reduction in the RCU CPU stall-warning timeout, in this
case by more than three orders of magnitude from 21 seconds to
20 milliseconds. This tighter timeout applies only to expedited
grace periods.

----------------------------------------------------------------
Akira Yokosawa (1):
docs: Update RCU cross-references as suggested in doc-guide

Alexander Aring (1):
srcu: Use export for srcu_struct defined by DEFINE_STATIC_SRCU()

David Vernet (3):
rcutorture: Avoid corner-case #DE with nsynctypes check
rcutorture: Add missing return and use __func__ in warning
rcu_sync: Fix comment to properly reflect rcu_sync_exit() behavior

Eric Dumazet (1):
rcu-tasks: Handle sparse cpu_possible_mask

Frederic Weisbecker (7):
rcu: Remove rcu_is_nocb_cpu()
rcu/nocb: Move rcu_nocb_is_setup to rcu_state
rcu: Assume rcu_init() is called before smp
rcu: Initialize boost kthread only for boot node prior SMP initialization
rcu/nocb: Initialize nocb kthreads only for boot CPU prior SMP initialization
rcutorture: Call preempt_schedule() through static call/key
rcu: Fix preemption mode check on synchronize_rcu[_expedited]()

Kalesh Singh (1):
rcu: Move expedited grace period (GP) work to RT kthread_worker

Lukas Bulwahn (1):
srcu: Drop needless initialization of sdp in srcu_gp_start()

Neeraj Upadhyay (1):
srcu: Ensure snp nodes tree is fully initialized before traversal

Padmanabha Srinivasaiah (1):
rcu-tasks: Fix race in schedule and flush work

Paul E. McKenney (58):
srcu: Tighten cleanup_srcu_struct() GP checks
srcu: Fix s/is/if/ typo in srcu_node comment
srcu: Make srcu_funnel_gp_start() cache ->mynode in snp_leaf
srcu: Make Tree SRCU able to operate without snp_node array
srcu: Dynamically allocate srcu_node array
srcu: Add size-state transitioning code
srcu: Make rcutorture dump the SRCU size state
srcu: Compute snp_seq earlier in srcu_funnel_gp_start()
srcu: Use invalid initial value for srcu_node GP sequence numbers
srcu: Add boot-time control over srcu_node array allocation
srcu: Avoid NULL dereference in srcu_torture_stats_print()
srcu: Prevent cleanup_srcu_struct() from freeing non-dynamic ->sda
srcu: Explain srcu_funnel_gp_start() call to list_add() is safe
srcu: Create concurrency-safe helper for initiating size transition
srcu: Add contention-triggered addition of srcu_node tree
rcu-tasks: Print pre-stall-warning informational messages
rcu-tasks: Make Tasks RCU account for userspace execution
rcu-tasks: Restore use of timers for non-RT kernels
rcu-tasks: Make show_rcu_tasks_generic_gp_kthread() check all CPUs
rcu-tasks: Handle sparse cpu_possible_mask in rcu_tasks_invoke_cbs()
torture: Add rcu_normal and rcu_expedited runs to torture.sh
rcutorture: Suppress debugging grace period delays during flooding
scftorture: Fix distribution of short handler delays
rcu: Make TASKS_RUDE_RCU select IRQ_WORK
torture: Reposition so that $? collects ssh code in torture.sh
torture: Use "-o Batchmode=yes" to disable ssh password requests
torture: Permit running of experimental torture types
rcu: Clarify fill-the-gap comment in rcu_segcblist_advance()
rcu: Fix rcu_preempt_deferred_qs_irqrestore() strict QS reporting
rcu: Check for jiffies going backwards
docs: Add documentation for rude and trace RCU flavors
kernel/smp: Provide boot-time timeout for CSD lock diagnostics
rcu: Add comments to final rcu_gp_cleanup() "if" statement
rcu: Print number of online CPUs in RCU CPU stall-warning messages
rcu: Make the TASKS_RCU Kconfig option be selected
rcutorture: Allow rcutorture without RCU Tasks Trace
rcutorture: Allow rcutorture without RCU Tasks
rcutorture: Allow rcutorture without RCU Tasks Rude
rcutorture: Add CONFIG_PREEMPT_DYNAMIC=n to TASKS02 scenario
rcutorture: Allow specifying per-scenario stat_interval
refscale: Allow refscale without RCU Tasks
refscale: Allow refscale without RCU Tasks Rude/Trace
rcuscale: Allow rcuscale without RCU Tasks
rcuscale: Allow rcuscale without RCU Tasks Rude/Trace
scftorture: Adjust for TASKS_RCU Kconfig option being selected
torture: Skip vmlinux check for kvm-again.sh runs
torture: Enable CSD-lock stall reports for scftorture
rcutorture: Adjust scenarios' Kconfig options for CONFIG_PREEMPT_DYNAMIC
scftorture: Remove extraneous "scf" from per_version_boot_params
torture: Save "make allmodconfig" .config file
rcutorture: Make kvm.sh allow more memory for --kasan runs
rcutorture: Make torture.sh refscale and rcuscale specify Tasks Trace RCU
rcutorture: Make torture.sh allow for --kasan
srcu: Automatically determine size-transition strategy at boot
srcu: Add contention check to call_srcu() srcu_data ->lock acquisition
srcu: Prevent expedited GPs and blocking readers from consuming CPU
Merge branches 'docs.2022.04.20a', 'fixes.2022.04.20a', 'nocb.2022.04.11b', 'rcu-tasks.2022.04.11b', 'srcu.2022.05.03a', 'torture.2022.04.11b', 'torture-tasks.2022.04.20a' and 'torturescript.2022.04.20a' into HEAD
Merge branch 'exp.2022.05.11a' into HEAD

Paul Menzel (1):
torture: Make thread detection more robust by using lspcu

Sebastian Andrzej Siewior (2):
rcu-tasks: Use rcuwait for the rcu_tasks_kthread()
rcu-tasks: Use schedule_hrtimeout_range() to wait for grace periods

Uladzislau Rezki (1):
rcu: Introduce CONFIG_RCU_EXP_CPU_STALL_TIMEOUT

Valentin Schneider (1):
preempt/dynamic: Introduce preemption model accessors

Zqiang (2):
rcu: Check for successful spawn of ->boost_kthread_task
rcu: Use IRQ_WORK_INIT_HARD() to avoid rcu_read_unlock() hangs

.../RCU/Design/Data-Structures/Data-Structures.rst | 2 +-
.../Expedited-Grace-Periods.rst | 2 +-
.../RCU/Design/Requirements/Requirements.rst | 36 +-
Documentation/RCU/arrayRCU.rst | 4 +-
Documentation/RCU/checklist.rst | 9 +-
Documentation/RCU/rcu.rst | 13 +-
Documentation/RCU/rculist_nulls.rst | 2 +-
Documentation/RCU/stallwarn.rst | 20 +
Documentation/RCU/whatisRCU.rst | 18 +-
Documentation/admin-guide/kernel-parameters.txt | 85 ++-
arch/Kconfig | 1 +
include/linux/rcupdate.h | 1 +
include/linux/sched.h | 41 ++
include/linux/srcutree.h | 32 +-
include/linux/torture.h | 2 +-
kernel/bpf/Kconfig | 1 +
kernel/rcu/Kconfig | 73 ++-
kernel/rcu/Kconfig.debug | 23 +-
kernel/rcu/rcu.h | 13 +-
kernel/rcu/rcu_segcblist.c | 8 +-
kernel/rcu/rcuscale.c | 22 +-
kernel/rcu/rcutorture.c | 129 +++--
kernel/rcu/refscale.c | 22 +-
kernel/rcu/srcutree.c | 639 +++++++++++++++------
kernel/rcu/sync.c | 2 +-
kernel/rcu/tasks.h | 89 ++-
kernel/rcu/tree.c | 146 ++++-
kernel/rcu/tree.h | 9 +-
kernel/rcu/tree_exp.h | 151 +++--
kernel/rcu/tree_nocb.h | 39 +-
kernel/rcu/tree_plugin.h | 28 +-
kernel/rcu/tree_stall.h | 36 +-
kernel/rcu/update.c | 2 +
kernel/scftorture.c | 5 +-
kernel/sched/core.c | 12 +
kernel/smp.c | 7 +-
kernel/trace/Kconfig | 1 +
.../testing/selftests/rcutorture/bin/functions.sh | 2 +-
.../selftests/rcutorture/bin/kvm-find-errors.sh | 2 +-
.../selftests/rcutorture/bin/kvm-recheck.sh | 7 +-
.../testing/selftests/rcutorture/bin/kvm-remote.sh | 14 +-
tools/testing/selftests/rcutorture/bin/kvm.sh | 10 +-
tools/testing/selftests/rcutorture/bin/torture.sh | 29 +-
.../selftests/rcutorture/configs/rcu/RUDE01 | 2 +
.../selftests/rcutorture/configs/rcu/SRCU-N | 2 +
.../selftests/rcutorture/configs/rcu/TASKS01 | 1 +
.../selftests/rcutorture/configs/rcu/TASKS02 | 4 +
.../selftests/rcutorture/configs/rcu/TASKS02.boot | 1 +
.../selftests/rcutorture/configs/rcu/TASKS03 | 2 +
.../selftests/rcutorture/configs/rcu/TRACE01 | 3 +
.../selftests/rcutorture/configs/rcu/TRACE02 | 2 +
.../selftests/rcutorture/configs/rcu/TREE04 | 5 +-
.../selftests/rcutorture/configs/rcu/TREE07 | 1 +
.../selftests/rcutorture/configs/rcu/TREE09 | 2 +
.../selftests/rcutorture/configs/rcu/TREE10 | 1 +
.../rcutorture/configs/rcu/ver_functions.sh | 16 +-
.../selftests/rcutorture/configs/rcuscale/CFcommon | 7 +-
.../selftests/rcutorture/configs/rcuscale/TREE | 2 +
.../selftests/rcutorture/configs/refscale/CFcommon | 4 +
.../rcutorture/configs/refscale/NOPREEMPT | 2 +
.../selftests/rcutorture/configs/scf/NOPREEMPT | 2 +
.../selftests/rcutorture/configs/scf/PREEMPT | 1 +
.../rcutorture/configs/scf/ver_functions.sh | 3 +-
63 files changed, 1411 insertions(+), 441 deletions(-)