[GIT PULL tip/core/rcu] RCU, LKMM, and KCSAN commits for v5.12

From: Paul E. McKenney
Date: Wed Jan 27 2021 - 20:17:21 EST


Hello, Ingo!

This pull request contains changes for RCU, KCSAN, LKMM, and nolibc.
You can pull the entire group using branch for-mingo. Or, if you prefer,
you can pull them separately, using for-mingo-rcu to pull the RCU changes,
for-mingo-kcsan to pull the KCSAN changes, for-mingo-lkmm to pull the
LKMM changes, and for-mingo-nolibc to pull the noclib changes.

The changes are as follows:

1. RCU updates (for-mingo-rcu):

a. Documentation updates.
https://lore.kernel.org/lkml/20210106005334.GA12159@paulmck-ThinkPad-P72/

b. Miscellaneous fixes.
https://lore.kernel.org/lkml/20210106005713.GA12492@paulmck-ThinkPad-P72/

c. kfree_rcu() updates from Uladzislau Rezki.
https://lore.kernel.org/lkml/20210106010102.GA12737@paulmck-ThinkPad-P72/

d. Addition of mem_dump_obj() to provide allocator return
addresses to more easily locate bugs. This has a
couple of RCU-related commits, but is mostly MM. I am
including it here because Andrew Morton pulled them in,
but then removed them stating that they were already in
a maintainer tree, namely -rcu.
https://lore.kernel.org/lkml/20210106011603.GA13180@paulmck-ThinkPad-P72/

e. Per-callback-batch tracking of numbers of callbacks,
which enables better debugging information and smarter
reactions to large numbers of callbacks.
https://lore.kernel.org/lkml/20210106012541.GA13972@paulmck-ThinkPad-P72/

f. The first round of Frederic Weisbecker's changes to allow
CPUs to be runtime switched from and to callback-offloaded
state.
https://lore.kernel.org/lkml/20210106013950.GA14663@paulmck-ThinkPad-P72/

g. CONFIG_PREEMPT_RT-related changes.
https://lore.kernel.org/lkml/20210106164746.GA19969@paulmck-ThinkPad-P72/

h. RCU CPU stall warning updates.
https://lore.kernel.org/lkml/20210106165210.GA20296@paulmck-ThinkPad-P72/

i. Addition of polling grace-period APIs for SRCU, requested
by Kent Overstreet.
https://lore.kernel.org/lkml/20210106165511.GA20555@paulmck-ThinkPad-P72/

j. Torture-test and torture-test scripting updates, including
a "torture everything" script that runs rcutorture,
locktorture, scftorture, rcuscale, and refscale.
Plus does a allmodconfig built.
https://lore.kernel.org/lkml/20210106171532.GA20769@paulmck-ThinkPad-P72/
https://lore.kernel.org/lkml/20210106172547.GA22404@paulmck-ThinkPad-P72/
https://lore.kernel.org/lkml/20210106173056.GA23035@paulmck-ThinkPad-P72/

2. Kernel concurrency sanitizer (KCSAN) updates from Marco Elver.
https://lore.kernel.org/lkml/20210106173323.GA23292@paulmck-ThinkPad-P72/

3. Linux-kernel memory model (LKMM) updates.
https://lore.kernel.org/lkml/20210106173548.GA23664@paulmck-ThinkPad-P72/

4. Fixes to nolibc that allows it to run once again on ARMv8.
https://lore.kernel.org/lkml/20210121072031.23777-1-w@xxxxxx/

All of the commits in this pull request have been subjected to subjected
to the kbuild test robot and -next testing, and are available in the
git repository based on v5.11-rc1 and v5.11-rc3 at:

git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git for-mingo

for you to fetch changes up to c8c430f4a2fb91b9804ed2f749364fc0dcd663fe:

Merge branch 'nolibc.2021.01.21a' into HEAD (2021-01-22 15:28:38 -0800)

----------------------------------------------------------------
Akira Yokosawa (2):
tools/memory-model: Remove redundant initialization in litmus tests
tools/memory-model: Fix typo in klitmus7 compatibility table

Frederic Weisbecker (17):
tools/rcutorture: Make identify_qemu_vcpus() independent of local language
rcu/nocb: Turn enabled/offload states into a common flag
rcu/nocb: Provide basic callback offloading state machine bits
rcu/nocb: Always init segcblist on CPU up
rcu/nocb: De-offloading CB kthread
rcu/nocb: Don't deoffload an offline CPU with pending work
rcu/nocb: De-offloading GP kthread
rcu/nocb: Re-offload support
rcu/nocb: Shutdown nocb timer on de-offloading
rcu/nocb: Flush bypass before setting SEGCBLIST_SOFTIRQ_ONLY
rcu/nocb: Set SEGCBLIST_SOFTIRQ_ONLY at the very last stage of de-offloading
rcu/nocb: Only cond_resched() from actual offloaded batch processing
rcu/nocb: Process batch locally as long as offloading isn't complete
rcu/nocb: Locally accelerate callbacks as long as offloading isn't complete
cpu/hotplug: Add lockdep_is_cpus_held()
timer: Add timer_curr_running()
tools/rcutorture: Support nocb toggle in TREE01

Joel Fernandes (Google) (6):
rcu/tree: Make rcu_do_batch count how many callbacks were executed
rcu/segcblist: Add additional comments to explain smp_mb()
rcu/segcblist: Add counters to segcblist datastructure
rcu/tree: segcblist: Remove redundant smp_mb()s
rcu/trace: Add tracing for how segcb list changes
rcu/segcblist: Add debug checks for segment lengths

Julia Cartwright (1):
rcu: Enable rcu_normal_after_boot unconditionally for RT

Marco Elver (2):
kcsan: Rewrite kcsan_prandom_u32_max() without prandom_u32_state()
random32: Re-enable KCSAN instrumentation

Mauro Carvalho Chehab (1):
list: Fix a typo at the kernel-doc markup

Neeraj Upadhyay (1):
rcu: Check and report missed fqs timer wakeup on RCU stall

Paul E. McKenney (88):
docs: Remove redundant "``" from Requirements.rst
doc: Remove obsolete RCU-bh and RCU-sched update-side API members
doc: Update RCU requirements RCU_INIT_POINTER() description
doc: Remove obsolete rcutree.rcu_idle_lazy_gp_delay boot parameter
srcu: Make Tiny SRCU use multi-bit grace-period counter
srcu: Provide internal interface to start a Tiny SRCU grace period
srcu: Provide internal interface to start a Tree SRCU grace period
srcu: Provide polling interfaces for Tiny SRCU grace periods
srcu: Provide polling interfaces for Tree SRCU grace periods
srcu: Document polling interfaces for Tree SRCU grace periods
srcu: Add comment explaining cookie overflow/wrap
rcutorture: Prepare for ->start_gp_poll and ->poll_gp_state
rcutorture: Add writer-side tests of polling grace-period API
rcutorture: Add reader-side tests of polling grace-period API
rcutorture: Add testing for RCU's global memory ordering
scftorture: Add debug output for wrong-CPU warning
rcu: Mark obtuse portion of stall warning as internal debug
rcu: For RCU grace-period kthread starvation, dump last CPU it ran on
rcu: Do not NMI offline CPUs
torture: Make --kcsan specify lockdep
torture: Make kvm.sh "--dryrun sched" summarize number of batches
torture: Make kvm.sh "--dryrun sched" summarize number of builds
torture: Allow kvm.sh --datestamp to specify subdirectories
torture: Prepare for splitting qemu execution from kvm-test-1-run.sh
torture: Add config2csv.sh script to compare torture scenarios
torture: Make kvm.sh "Test Summary" date be end of test
torture: Make kvm.sh arguments accumulate
torture: Print run duration at end of kvm.sh execution
torture: Make kvm.sh return failure upon build failure
torture: Make kvm.sh include --kconfig arguments in CPU calculation
torture: Add kvm.sh test summary to end of log file
torture: Stop hanging on panic
torture: Add --dryrun batches to help schedule a distributed run
torture: s/STOP/STOP.1/ to avoid scenario collision
torture: Simplify exit-code plumbing for kvm-recheck.sh and kvm-find-errors.sh
torture: Remove "Failed to add ttynull console" false positive
torture: Allow standalone kvm-recheck.sh run detect --trust-make
tools/memory-model: Tie acquire loads to reads-from
rcu: Add lockdep_assert_irqs_disabled() to rcu_sched_clock_irq() and callees
rcu: Add lockdep_assert_irqs_disabled() to raw_spin_unlock_rcu_node() macros
rcu: Make TASKS_TRACE_RCU select IRQ_WORK
torture: Do Kconfig analysis only once per scenario
rcutorture: Test runtime toggling of CPUs' callback offloading
rcu/nocb: Add grace period and task state to show_rcu_nocb_state() output
rcu/nocb: Add nocb CB kthread list to show_rcu_nocb_state() output
rcu/nocb: Code-style nits in callback-offloading toggling
rcu: Do any deferred nocb wakeups at CPU offline time
torture: Add torture.sh torture-everything script
torture: Make torture.sh use common time-duration bash functions
torture: Remove use of "eval" in torture.sh
torture: Add "make allmodconfig" to torture.sh
torture: Auto-size SCF and scaling runs based on number of CPUs
torture: Enable torture.sh argument checking
torture: Make torture.sh rcuscale and refscale deal with allmodconfig
torture: Make torture.sh refscale runs use verbose_batched module parameter
torture: Create doyesno helper function for torture.sh
torture: Make torture.sh allmodconfig retain and label output
torture: Make torture.sh throttle VERBOSE_TOROUT_*() for refscale
torture: Make torture.sh refuse to do zero-length runs
torture: Drop log.long generation from torture.sh
torture: Allow scenarios to be specified to torture.sh
torture: Add command and results directory to torture.sh log
torture: Add --kcsan-kmake-arg to torture.sh for KCSAN
torture: Compress KASAN vmlinux files
refscale: Allow summarization of verbose output
rcutorture: Require entire stutter period be post-boot
rcutorture: Make synctype[] and nsynctype be static global
rcutorture: Make rcu_torture_fakewriter() use blocking wait primitives
torture: Add fuzzed hrtimer-based sleep functions
rcutorture: Use torture_hrtimeout_jiffies() to avoid busy-waits
torture: Make stutter use torture_hrtimeout_*() functions
rcutorture: Use hrtimers for reader and writer delays
torture: Make refscale throttle high-rate printk()s
torture: Throttle VERBOSE_TOROUT_*() output
rcutorture: Make object_debug also double call_rcu() heap object
torture: Clean up after torture-test CPU hotplugging
torture: Maintain torture-specific set of CPUs-online books
rcutorture: Add rcutree.use_softirq=0 to RUDE01 and TASKS01
mm: Add mem_dump_obj() to print source of memory block
mm: Make mem_dump_obj() handle NULL and zero-sized pointers
mm: Make mem_dump_obj() handle vmalloc() memory
mm: Make mem_obj_dump() vmalloc() dumps include start and length
rcu: Make call_rcu() print mem_dump_obj() info for double-freed callback
percpu_ref: Dump mem_dump_obj() info upon reference-count underflow
Merge branches 'doc.2021.01.06a', 'fixes.2021.01.04b', 'kfree_rcu.2021.01.04a', 'mmdumpobj.2021.01.22a', 'nocb.2021.01.06a', 'rt.2021.01.04a', 'stall.2021.01.06a', 'torture.2021.01.12a' and 'tortureall.2021.01.06a' into HEAD
Merge branch 'kcsan.2021.01.04a' into HEAD
Merge branch 'lkmm.2021.01.04a' into HEAD
Merge branch 'nolibc.2021.01.21a' into HEAD

Paul Gortmaker (1):
docs: Fix typos and drop/fix dead links in RCU documentation

Peter Zijlstra (1):
sched/core: Allow try_invoke_on_locked_down_task() with irqs disabled

Scott Wood (1):
rcu: Unconditionally use rcuc threads on PREEMPT_RT

Sebastian Andrzej Siewior (3):
rcu: Make RCU_BOOST default on CONFIG_PREEMPT_RT
doc: Update RCU's requirements page about the PREEMPT_RT wiki
doc: Use CONFIG_PREEMPTION

Uladzislau Rezki (Sony) (3):
rcu: Introduce kfree_rcu() single-argument macro
rcu: Eliminate the __kvfree_rcu() macro
rcu-tasks: Add RCU-tasks self tests

Wang Qing (1):
locking: Remove duplicate include of percpu-rwsem.h

Willy Tarreau (10):
tools/nolibc: Add the definition for dup()
tools/nolibc: Make dup2() rely on dup3() when available
tools/nolibc: Make getpgrp() fall back to getpgid(0)
tools/nolibc: Implement fork() based on clone()
tools/nolibc: Implement poll() based on ppoll()
tools/nolibc: Get timeval, timespec and timezone from linux/time.h
tools/nolibc: Remove incorrect definitions of __ARCH_WANT_*
tools/nolibc: Emit detailed error for missing alternate syscall number definitions
tools/nolibc: Fix position of -lgcc in the documented example
tools/rcutorture: Fix position of -lgcc in mkinitrd.sh

Zqiang (1):
rcu: Record kvfree_call_rcu() call stack for KASAN

.../Expedited-Grace-Periods.rst | 4 +-
.../RCU/Design/Requirements/Requirements.rst | 732 +++++++++++----------
Documentation/RCU/checklist.rst | 10 +-
Documentation/RCU/rcubarrier.rst | 6 +-
Documentation/RCU/stallwarn.rst | 27 +-
Documentation/RCU/whatisRCU.rst | 10 +-
Documentation/admin-guide/kernel-parameters.txt | 39 +-
include/linux/cpu.h | 2 +
include/linux/list.h | 2 +-
include/linux/mm.h | 2 +
include/linux/rcu_segcblist.h | 120 +++-
include/linux/rcupdate.h | 42 +-
include/linux/slab.h | 2 +
include/linux/srcu.h | 3 +
include/linux/srcutiny.h | 7 +-
include/linux/timer.h | 2 +
include/linux/torture.h | 27 +-
include/linux/vmalloc.h | 6 +
include/trace/events/rcu.h | 26 +
kernel/cpu.c | 7 +
kernel/kcsan/core.c | 26 +-
kernel/locking/locktorture.c | 1 -
kernel/rcu/Kconfig | 5 +-
kernel/rcu/rcu.h | 16 +-
kernel/rcu/rcu_segcblist.c | 216 ++++--
kernel/rcu/rcu_segcblist.h | 57 +-
kernel/rcu/rcutorture.c | 395 +++++++++--
kernel/rcu/refscale.c | 23 +-
kernel/rcu/srcutiny.c | 77 ++-
kernel/rcu/srcutree.c | 147 ++++-
kernel/rcu/tasks.h | 79 +++
kernel/rcu/tree.c | 101 ++-
kernel/rcu/tree.h | 2 +
kernel/rcu/tree_exp.h | 2 +-
kernel/rcu/tree_plugin.h | 367 ++++++++++-
kernel/rcu/tree_stall.h | 60 +-
kernel/rcu/update.c | 4 +-
kernel/scftorture.c | 6 +-
kernel/sched/core.c | 9 +-
kernel/time/timer.c | 14 +
kernel/torture.c | 167 ++++-
lib/Makefile | 3 -
lib/percpu-refcount.c | 12 +-
mm/slab.c | 20 +
mm/slab.h | 12 +
mm/slab_common.c | 75 +++
mm/slob.c | 6 +
mm/slub.c | 40 ++
mm/util.c | 31 +
mm/vmalloc.c | 13 +
tools/include/nolibc/nolibc.h | 153 +++--
tools/memory-model/Documentation/glossary.txt | 12 +-
tools/memory-model/README | 2 +-
.../litmus-tests/CoRR+poonceonce+Once.litmus | 4 +-
.../litmus-tests/CoRW+poonceonce+Once.litmus | 4 +-
.../litmus-tests/CoWR+poonceonce+Once.litmus | 4 +-
.../litmus-tests/CoWW+poonceonce.litmus | 4 +-
.../IRIW+fencembonceonces+OnceOnce.litmus | 5 +-
.../litmus-tests/IRIW+poonceonces+OnceOnce.litmus | 5 +-
.../ISA2+pooncelock+pooncelock+pombonce.litmus | 7 +-
.../litmus-tests/ISA2+poonceonces.litmus | 6 +-
...cerelease+poacquirerelease+poacquireonce.litmus | 6 +-
.../LB+fencembonceonce+ctrlonceonce.litmus | 5 +-
.../LB+poacquireonce+pooncerelease.litmus | 5 +-
.../litmus-tests/LB+poonceonces.litmus | 5 +-
.../MP+fencewmbonceonce+fencermbonceonce.litmus | 5 +-
.../litmus-tests/MP+onceassign+derefonce.litmus | 4 +-
.../MP+polockmbonce+poacquiresilsil.litmus | 5 +-
.../MP+polockonce+poacquiresilsil.litmus | 5 +-
tools/memory-model/litmus-tests/MP+polocks.litmus | 6 +-
.../litmus-tests/MP+poonceonces.litmus | 5 +-
.../MP+pooncerelease+poacquireonce.litmus | 5 +-
.../memory-model/litmus-tests/MP+porevlocks.litmus | 6 +-
.../litmus-tests/R+fencembonceonces.litmus | 5 +-
.../memory-model/litmus-tests/R+poonceonces.litmus | 5 +-
.../S+fencewmbonceonce+poacquireonce.litmus | 5 +-
.../memory-model/litmus-tests/S+poonceonces.litmus | 5 +-
.../litmus-tests/SB+fencembonceonces.litmus | 5 +-
.../litmus-tests/SB+poonceonces.litmus | 5 +-
.../litmus-tests/SB+rfionceonce-poonceonces.litmus | 5 +-
.../litmus-tests/WRC+poonceonces+Once.litmus | 5 +-
.../WRC+pooncerelease+fencermbonceonce+Once.litmus | 5 +-
.../Z6.0+pooncelock+poonceLock+pombonce.litmus | 7 +-
.../Z6.0+pooncelock+pooncelock+pombonce.litmus | 7 +-
...release+poacquirerelease+fencembonceonce.litmus | 6 +-
.../testing/selftests/rcutorture/bin/config2csv.sh | 67 ++
.../selftests/rcutorture/bin/console-badness.sh | 1 +
.../testing/selftests/rcutorture/bin/functions.sh | 36 +-
.../selftests/rcutorture/bin/kvm-find-errors.sh | 9 +-
.../selftests/rcutorture/bin/kvm-recheck.sh | 3 +-
.../selftests/rcutorture/bin/kvm-test-1-run.sh | 12 +-
tools/testing/selftests/rcutorture/bin/kvm.sh | 103 ++-
tools/testing/selftests/rcutorture/bin/mkinitrd.sh | 2 +-
.../selftests/rcutorture/bin/parse-build.sh | 2 +-
.../selftests/rcutorture/bin/parse-console.sh | 2 +-
tools/testing/selftests/rcutorture/bin/torture.sh | 442 +++++++++++++
.../selftests/rcutorture/configs/rcu/RUDE01.boot | 1 +
.../selftests/rcutorture/configs/rcu/TASKS01.boot | 1 +
.../selftests/rcutorture/configs/rcu/TREE01.boot | 4 +-
99 files changed, 3163 insertions(+), 917 deletions(-)
create mode 100755 tools/testing/selftests/rcutorture/bin/config2csv.sh
create mode 100755 tools/testing/selftests/rcutorture/bin/torture.sh