Hello! This pull request contains the following changes: 1. Miscellaneous fixes. https://lore.kernel.org/lkml/20200415171017.GA7821@paulmck-ThinkPad-P72 2. kfree_rcu() updates. https://lore.kernel.org/lkml/20200415171924.GA9270@paulmck-ThinkPad-P72 3. Remove scheduler locking restriction https://lore.kernel.org/lkml/20200415175543.GA10416@paulmck-ThinkPad-P72 4. RCU-tasks update, including addition of RCU Tasks Trace for BPF use and RCU Tasks Rude. (This branch is on top of #3 due to overlap of changed code.) https://lore.kernel.org/lkml/20200415181856.GA11037@paulmck-ThinkPad-P72 5. RCU CPU stall warning updates. https://lore.kernel.org/lkml/20200415172341.GA9519@paulmck-ThinkPad-P72 6. Torture-test updates. https://lore.kernel.org/lkml/20200415173037.GA9768@paulmck-ThinkPad-P72 All of these have been subjected to the kbuild test robot and -next testing, and are available in the git repository based on v5.7-rc2 at: git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git for-mingo for you to fetch changes up to f736e0f1a55a88cb258b73da77463573739e9ac9: Merge branches 'fixes.2020.04.27a', 'kfree_rcu.2020.04.27a', 'rcu-tasks.2020.04.27a', 'stall.2020.04.27a' and 'torture.2020.05.07a' into HEAD (2020-05-07 10:18:32 -0700) ---------------------------------------------------------------- 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 (74): 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() Merge branches 'fixes.2020.04.27a', 'kfree_rcu.2020.04.27a', 'rcu-tasks.2020.04.27a', 'stall.2020.04.27a' and 'torture.2020.05.07a' into HEAD Randy Dunlap (1): locktorture.c: Fix if-statement empty body warnings Zhaolong Zhang (1): rcu: Fix the (t=0 jiffies) false positive .../RCU/Design/Requirements/Requirements.rst | 61 +- Documentation/admin-guide/kernel-parameters.txt | 19 + drivers/gpu/drm/drm_dp_mst_topology.c | 2 +- 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 | 3 +- include/linux/rcutree.h | 1 + include/linux/sched.h | 10 +- include/linux/torture.h | 2 +- include/linux/wait.h | 2 + init/init_task.c | 5 + kernel/fork.c | 5 + 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 | 179 ++- kernel/rcu/tree.h | 3 + kernel/rcu/tree_exp.h | 50 +- kernel/rcu/tree_plugin.h | 86 +- kernel/rcu/tree_stall.h | 144 ++- kernel/rcu/update.c | 394 +------ kernel/sched/core.c | 48 + kernel/trace/Kconfig | 1 + kernel/trace/ftrace.c | 17 +- .../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 +- 43 files changed, 2156 insertions(+), 621 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