[GIT PULL] RCU updates for v5.8

From: Ingo Molnar
Date: Mon Jun 01 2020 - 09:16:04 EST


Please pull the latest core/rcu git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-rcu-2020-06-01

# HEAD: cb3cb6733fbd8fd8d2c716095fdca42dadba2063 Merge branch 'WIP.core/rcu' into core/rcu, to pick up two x86/entry dependencies

The RCU updates for this cycle were:

- RCU-tasks update, including addition of RCU Tasks Trace for
- kfree_rcu() updates.
- Remove scheduler locking restriction
- RCU CPU stall warning updates.
- Torture-test updates.
- Miscellaneous fixes and other updates.

Dependency warning/note: this tree pulled in the kprobes changes that
I sent a couple of minutes ago.



Frederic Weisbecker (1):
arm64: Prepare arch_nmi_enter() for recursion

Jason Yan (1):
rcutorture: Make rcu_fwds and rcu_fwd_emergency_stop static

Joel Fernandes (Google) (3):
rcuperf: Add ability to increase object allocation size
rcu/tree: Add a shrinker to prevent OOM due to kfree_rcu() batching
rcu/tree: Count number of batched kfree_rcu() locklessly

Jonathan Neuschäfer (1):
Revert "rculist: Describe variadic macro argument in a Sphinx-compatible way"

Jules Irenge (2):
rcu: Replace assigned pointer ret value by corresponding boolean value
rcu: Replace 1 by true

Lai Jiangshan (3):
rcu: Don't set nesting depth negative in rcu_preempt_deferred_qs()
rcu: Remove unused ->rcu_read_unlock_special.b.deferred_qs field
rcu: Don't use negative nesting depth in __rcu_read_unlock()

Mauro Carvalho Chehab (1):
rcu: Get rid of some doc warnings in update.c

Paul E. McKenney (75):
rcu: Add KCSAN stubs
srcu: Add KCSAN stubs
rcu: Mark rcu_state.ncpus to detect concurrent writes
rcu: Add *_ONCE() and data_race() to rcu_node ->exp_tasks plus locking
rcu: Add READ_ONCE and data_race() to rcu_node ->boost_tasks
srcu: Add data_race() to ->srcu_lock_count and ->srcu_unlock_count arrays
rcu: Add WRITE_ONCE() to rcu_node ->boost_tasks
rcu: Use data_race() for RCU CPU stall-warning prints
drm: Make drm_dp_mst_dsc_aux_for_port() safe for old compilers
rcu: Expedite first two FQS scans under callback-overload conditions
rcu: Mark rcu_state.gp_seq to detect more concurrent writes
rcu: Convert ULONG_CMP_GE() to time_after() for jiffy comparison
rcu: Convert rcu_initiate_boost() ULONG_CMP_GE() to time_after()
rcu: Convert rcu_nohz_full_cpu() ULONG_CMP_LT() to time_before()
rcu: Add rcu_gp_might_be_stalled()
rcu: Add KCSAN stubs to update.c
rcu: Make rcu_read_unlock_special() safe for rq/pi locks
rcutorture: Add test of holding scheduler locks across rcu_read_unlock()
rcu: Add comments marking transitions between RCU watching and not
rcu-tasks: Use context-switch hook for PREEMPT=y kernels
sched/core: Add function to sample state of locked-down task
rcu: Add per-task state to RCU CPU stall warnings
rcu-tasks: Move Tasks RCU to its own file
rcu-tasks: Create struct to hold state information
rcu: Reinstate synchronize_rcu_mult()
rcutorture: Add a test for synchronize_rcu_mult()
rcu-tasks: Refactor RCU-tasks to allow variants to be added
rcu-tasks: Add an RCU-tasks rude variant
rcutorture: Add torture tests for RCU Tasks Rude
rcu-tasks: Use unique names for RCU-Tasks kthreads and messages
rcu-tasks: Further refactor RCU-tasks to allow adding more variants
rcu-tasks: Code movement to allow more Tasks RCU variants
rcu-tasks: Add an RCU Tasks Trace to simplify protection of tracing hooks
rcutorture: Add torture tests for RCU Tasks Trace
rcu-tasks: Add stall warnings for RCU Tasks Trace
rcu-tasks: Move #ifdef into tasks.h
rcu-tasks: Add RCU tasks to rcutorture writer stall output
rcu-tasks: Make rcutorture writer stall output include GP state
rcu-tasks: Make RCU Tasks Trace make use of RCU scheduler hooks
rcu-tasks: Add a grace-period start time for throttling and debug
rcu-tasks: Provide boot parameter to delay IPIs until late in grace period
rcu-tasks: Split ->trc_reader_need_end
rcu-tasks: Add grace-period and IPI counts to statistics
rcu-tasks: Add Kconfig option to mediate smp_mb() vs. IPI
rcu-tasks: Avoid IPIing userspace/idle tasks if kernel is so built
rcu-tasks: Allow rcu_read_unlock_trace() under scheduler locks
rcu-tasks: Disable CPU hotplug across RCU tasks trace scans
rcu-tasks: Handle the running-offline idle-task special case
rcu-tasks: Make RCU tasks trace also wait for idle tasks
rcu-tasks: Add rcu_dynticks_zero_in_eqs() effectiveness statistics
rcu-tasks: Add count for idle tasks on offline CPUs
rcutorture: Add TRACE02 scenario enabling RCU Tasks Trace IPIs
rcu-tasks: Add IPI failure count to statistics
rcu-tasks: Allow standalone use of TASKS_{TRACE_,}RCU
ftrace: Use synchronize_rcu_tasks_rude() instead of ftrace_sync()
rcu: Use data_race() for RCU expedited CPU stall-warning prints
rcu: When GP kthread is starved, tag idle threads as false positives
rcu: Remove self-stack-trace when all quiescent states seen
rcutorture: Add KCSAN stubs
rcutorture: Make kvm-recheck-rcu.sh handle truncated lines
rcutorture: Mark data-race potential for rcu_barrier() test statistics
rcutorture: Add flag to produce non-busy-wait task stalls
rcutorture: Right-size TREE10 CPU consumption
rcu: Allow rcutorture to starve grace-period kthread
torture: Add --kcsan argument to top-level kvm.sh script
torture: Make --kcsan argument also create a summary
torture: Eliminate duplicate #CHECK# from ConfigFragment
torture: Abstract application of additional Kconfig options
torture: Allow --kconfig options to override --kcsan defaults
torture: Allow scenario-specific Kconfig options to override CFcommon
torture: Save a few lines by using config_override_param initially
torture: Add a --kasan argument
rcutorture: Convert ULONG_CMP_LT() to time_before()
rcu: Make RCU IRQ enter/exit functions rely on in_nmi()
rcu: Abstract out rcu_irq_enter_check_tick() from rcu_nmi_enter()

Peter Zijlstra (8):
printk: Disallow instrumenting print_nmi_enter()
hardirq/nmi: Allow nested nmi_enter()
lockdep: Always inline lockdep_{off,on}()
sh/ftrace: Move arch_ftrace_nmi_{enter,exit} into nmi exception
sched,rcu,tracing: Avoid tracing before in_nmi() is correct
x86/mce: Send #MC singal from task work
x86: Replace ist_enter() with nmi_enter()
rcu: Allow for smp_call_function() running callbacks from idle

Petr Mladek (1):
printk: Prepare for nested printk_nmi_enter()

Randy Dunlap (1):
locktorture.c: Fix if-statement empty body warnings

Thomas Gleixner (6):
vmlinux.lds.h: Create section for protection against instrumentation
x86/entry: Get rid of ist_begin/end_non_atomic()
rcu/tree: Mark the idle relevant functions noinstr
rcu: Provide rcu_irq_exit_preempt()
rcu: Provide __rcu_is_watching()
rcu: Provide rcu_irq_exit_check_preempt()

Zhaolong Zhang (1):
rcu: Fix the (t=0 jiffies) false positive

.../RCU/Design/Requirements/Requirements.rst | 61 +-
Documentation/admin-guide/kernel-parameters.txt | 19 +
Documentation/trace/ftrace-design.rst | 8 -
arch/arm64/include/asm/hardirq.h | 78 +-
arch/arm64/kernel/sdei.c | 14 +-
arch/arm64/kernel/traps.c | 8 +-
arch/powerpc/kernel/traps.c | 22 +-
arch/powerpc/kernel/vmlinux.lds.S | 1 +
arch/sh/Kconfig | 1 -
arch/sh/kernel/traps.c | 12 +
arch/x86/include/asm/traps.h | 5 -
arch/x86/kernel/cpu/mce/core.c | 65 +-
arch/x86/kernel/cpu/mce/p5.c | 5 +-
arch/x86/kernel/cpu/mce/winchip.c | 5 +-
arch/x86/kernel/traps.c | 108 +-
drivers/gpu/drm/drm_dp_mst_topology.c | 2 +-
include/asm-generic/sections.h | 3 +
include/asm-generic/vmlinux.lds.h | 10 +
include/linux/compiler.h | 53 +
include/linux/compiler_types.h | 4 +
include/linux/ftrace_irq.h | 11 -
include/linux/hardirq.h | 47 +-
include/linux/lockdep.h | 23 +-
include/linux/preempt.h | 4 +-
include/linux/rculist.h | 4 +-
include/linux/rcupdate.h | 53 +-
include/linux/rcupdate_trace.h | 88 ++
include/linux/rcupdate_wait.h | 19 +
include/linux/rcutiny.h | 6 +-
include/linux/rcutree.h | 9 +
include/linux/sched.h | 16 +-
include/linux/torture.h | 2 +-
include/linux/wait.h | 2 +
init/init_task.c | 5 +
kernel/fork.c | 5 +
kernel/locking/lockdep.c | 19 -
kernel/printk/internal.h | 8 +-
kernel/printk/printk_safe.c | 9 +-
kernel/rcu/Kconfig | 46 +-
kernel/rcu/Kconfig.debug | 4 +
kernel/rcu/rcu.h | 7 +
kernel/rcu/rcuperf.c | 5 +-
kernel/rcu/rcutorture.c | 155 ++-
kernel/rcu/srcutree.c | 21 +-
kernel/rcu/tasks.h | 1193 ++++++++++++++++++++
kernel/rcu/tree.c | 401 +++++--
kernel/rcu/tree.h | 3 +
kernel/rcu/tree_exp.h | 50 +-
kernel/rcu/tree_plugin.h | 90 +-
kernel/rcu/tree_stall.h | 144 ++-
kernel/rcu/update.c | 397 +------
kernel/sched/core.c | 48 +
kernel/trace/Kconfig | 11 +-
kernel/trace/ftrace.c | 17 +-
scripts/mod/modpost.c | 2 +-
.../selftests/rcutorture/bin/kcsan-collapse.sh | 22 +
.../selftests/rcutorture/bin/kvm-recheck-rcu.sh | 16 +-
.../selftests/rcutorture/bin/kvm-recheck.sh | 9 +
.../selftests/rcutorture/bin/kvm-test-1-run.sh | 52 +-
tools/testing/selftests/rcutorture/bin/kvm.sh | 11 +
.../selftests/rcutorture/configs/rcu/CFLIST | 3 +
.../selftests/rcutorture/configs/rcu/RUDE01 | 10 +
.../selftests/rcutorture/configs/rcu/RUDE01.boot | 1 +
.../selftests/rcutorture/configs/rcu/TRACE01 | 11 +
.../selftests/rcutorture/configs/rcu/TRACE01.boot | 1 +
.../selftests/rcutorture/configs/rcu/TRACE02 | 11 +
.../selftests/rcutorture/configs/rcu/TRACE02.boot | 1 +
.../selftests/rcutorture/configs/rcu/TREE10 | 2 +-
68 files changed, 2609 insertions(+), 949 deletions(-)
create mode 100644 include/linux/rcupdate_trace.h
create mode 100644 kernel/rcu/tasks.h
create mode 100755 tools/testing/selftests/rcutorture/bin/kcsan-collapse.sh
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/RUDE01
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/RUDE01.boot
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TRACE01
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TRACE01.boot
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TRACE02
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TRACE02.boot