[GIT PULL] RCU changes for v6.12

From: Neeraj Upadhyay
Date: Fri Sep 13 2024 - 22:45:47 EST


Hello Linus,

When the merge window opens, please pull this RCU update from:

git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git tags/rcu.release.v6.12

# HEAD: 355debb83bf79853cde43579f88eed16adb1da29: Merge branches 'context_tracking.15.08.24a', 'csd.lock.15.08.24a', 'nocb.09.09.24a', 'rcutorture.14.08.24a', 'rcustall.09.09.24a', 'srcu.12.08.24a', 'rcu.tasks.14.08.24a', 'rcu_scaling_tests.15.08.24a', 'fixes.12.08.24a' and 'misc.11.08.24a' into next.09.09.24a (2024-09-09 00:09:47 +0530)


Following are the merge conflicts with other trees:

1. Merge conflicts with slab tree

Stephen's resolution: https://lore.kernel.org/lkml/20240812124748.3725011b@xxxxxxxxxxxxxxxx/

In case you might want to refer to it, a sample tree with resolutions applied is at
git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git heads/rcu.v6.12.slab.tree.conflict_res


2. Merge conflict with kvm-fixes tree

Stephen's resolution: https://lore.kernel.org/lkml/20240905154122.4d1f8ca5@xxxxxxxxxxxxxxxx/

In case you might want to refer to it, a sample tree with resolutions applied is at
git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git heads/rcu.v6.12.kvm-fixes.tree.conflict_res

----------------------------------------------------------------
RCU pull request for v6.12

This pull request contains the following branches:

context_tracking.15.08.24a: Rename context tracking state related
symbols and remove references to "dynticks" in various context
tracking state variables and related helpers; force
context_tracking_enabled_this_cpu() to be inlined to avoid
leaving a noinstr section.

csd.lock.15.08.24a: Enhance CSD-lock diagnostic reports; add an API
to provide an indication of ongoing CSD-lock stall.

nocb.09.09.24a: Update and simplify RCU nocb code to handle
(de-)offloading of callbacks only for offline CPUs; fix RT
throttling hrtimer being armed from offline CPU.

rcutorture.14.08.24a: Remove redundant rcu_torture_ops get_gp_completed
fields; add SRCU ->same_gp_state and ->get_comp_state
functions; add generic test for NUM_ACTIVE_*RCU_POLL* for
testing RCU and SRCU polled grace periods; add CFcommon.arch
for arch-specific Kconfig options; print number of update types
in rcu_torture_write_types();
add rcutree.nohz_full_patience_delay testing to the TREE07
scenario; add a stall_cpu_repeat module parameter to test
repeated CPU stalls; add argument to limit number of CPUs a
guest OS can use in torture.sh;

rcustall.09.09.24a: Abbreviate RCU CPU stall warnings during CSD-lock
stalls; Allow dump_cpu_task() to be called without disabling
preemption; defer printing stall-warning backtrace when holding
rcu_node lock.

srcu.12.08.24a: Make SRCU gp seq wrap-around faster; add KCSAN checks
for concurrent updates to ->srcu_n_exp_nodelay and
->reschedule_count which are used in heuristics governing
auto-expediting of normal SRCU grace periods and
grace-period-state-machine delays; mark idle SRCU-barrier
callbacks to help identify stuck SRCU-barrier callback.

rcu.tasks.14.08.24a: Remove RCU Tasks Rude asynchronous APIs as they
are no longer used; stop testing RCU Tasks Rude asynchronous
APIs; fix access to non-existent percpu regions; check
processor-ID assumptions during chosen CPU calculation for
callback enqueuing; update description of rtp->tasks_gp_seq
grace-period sequence number; add rcu_barrier_cb_is_done()
to identify whether a given rcu_barrier callback is stuck;
mark idle Tasks-RCU-barrier callbacks; add
*torture_stats_print() functions to print detailed
diagnostics for Tasks-RCU variants; capture start time of
rcu_barrier_tasks*() operation to help distinguish a hung
barrier operation from a long series of barrier operations.

rcu_scaling_tests.15.08.24a:
refscale: Add a TINY scenario to support tests of Tiny RCU
and Tiny SRCU; Optimize process_durations() operation;

rcuscale: Dump stacks of stalled rcu_scale_writer() instances;
dump grace-period statistics when rcu_scale_writer() stalls;
mark idle RCU-barrier callbacks to identify stuck RCU-barrier
callbacks; print detailed grace-period and barrier diagnostics
on rcu_scale_writer() hangs for Tasks-RCU variants; warn if
async module parameter is specified for RCU implementations
that do not have async primitives such as RCU Tasks Rude;
make all writer tasks report upon hang; tolerate repeated
GFP_KERNEL failure in rcu_scale_writer(); use special allocator
for rcu_scale_writer(); NULL out top-level pointers to heap
memory to avoid double-free bugs on modprobe failures; maintain
per-task instead of per-CPU callbacks count to avoid any issues
with migration of either tasks or callbacks; constify struct
ref_scale_ops.

fixes.12.08.24a: Use system_unbound_wq for kfree_rcu work to avoid
disturbing isolated CPUs.

misc.11.08.24a: Warn on unexpected rcu_state.srs_done_tail state;
Better define "atomic" for list_replace_rcu() and
hlist_replace_rcu() routines; annotate struct
kvfree_rcu_bulk_data with __counted_by().

----------------------------------------------------------------
Christophe JAILLET (2):
refscale: Optimize process_durations()
refscale: Constify struct ref_scale_ops

Frederic Weisbecker (14):
rcu/nocb: Introduce RCU_NOCB_LOCKDEP_WARN()
rcu/nocb: Move nocb field at the end of state struct
rcu/nocb: Assert no callbacks while nocb kthread allocation fails
rcu/nocb: Introduce nocb mutex
rcu/nocb: (De-)offload callbacks on offline CPUs only
rcu/nocb: Remove halfway (de-)offloading handling from bypass
rcu/nocb: Remove halfway (de-)offloading handling from rcu_core()'s QS reporting
rcu/nocb: Remove halfway (de-)offloading handling from rcu_core
rcu/nocb: Remove SEGCBLIST_RCU_CORE
rcu/nocb: Remove SEGCBLIST_KTHREAD_CB
rcu/nocb: Simplify (de-)offloading state machine
rcu/nocb: Fix RT throttling hrtimer armed from offline CPU
rcu/nocb: Conditionally wake up rcuo if not already waiting on GP
rcu/nocb: Remove superfluous memory barrier after bypass enqueue

JP Kobryn (1):
srcu: faster gp seq wrap-around

Neeraj Upadhyay (1):
Merge branches 'context_tracking.15.08.24a', 'csd.lock.15.08.24a', 'nocb.09.09.24a', 'rcutorture.14.08.24a', 'rcustall.09.09.24a', 'srcu.12.08.24a', 'rcu.tasks.14.08.24a', 'rcu_scaling_tests.15.08.24a', 'fixes.12.08.24a' and 'misc.11.08.24a' into next.09.09.24a

Paul E. McKenney (41):
rcutorture: Remove redundant rcu_torture_ops get_gp_completed fields
rcutorture: Add SRCU ->same_gp_state and ->get_comp_state functions
rcutorture: Generic test for NUM_ACTIVE_*RCU_POLL*
rcutorture: Make rcu_torture_write_types() print number of update types
tools/rcu: Remove RCU Tasks Rude asynchronous APIs from rcu-updaters.sh
rcu/kfree: Warn on unexpected tail state
locking/csd_lock: Print large numbers as negatives
rcu: Better define "atomic" for list replacement
rcutorture: Add rcutree.nohz_full_patience_delay to TREE07
srcu: Check for concurrent updates of heuristics
srcu: Mark callbacks not currently participating in barrier operation
rcutorture: Add a stall_cpu_repeat module parameter
torture: Add torture.sh --guest-cpu-limit argument for limited hosts
doc: Remove RCU Tasks Rude asynchronous APIs
rcutorture: Stop testing RCU Tasks Rude asynchronous APIs
rcuscale: Stop testing RCU Tasks Rude asynchronous APIs
rcu-tasks: Remove RCU Tasks Rude asynchronous APIs
rcu/tasks: Check processor-ID assumptions
rcu/tasks: Update rtp->tasks_gp_seq comment
rcu: Provide rcu_barrier_cb_is_done() to check rcu_barrier() CBs
rcu/tasks: Mark callbacks not currently participating in barrier operation
rcu/tasks: Add detailed grace-period and barrier diagnostics
rcu/tasks: Add rcu_barrier_tasks*() start time to diagnostics
refscale: Add TINY scenario
rcuscale: Save a few lines with whitespace-only change
rcuscale: Dump stacks of stalled rcu_scale_writer() instances
rcuscale: Dump grace-period statistics when rcu_scale_writer() stalls
rcu: Mark callbacks not currently participating in barrier operation
rcuscale: Print detailed grace-period and barrier diagnostics
locking/csd_lock: Provide an indication of ongoing CSD-lock stall
locking/csd-lock: Use backoff for repeated reports of same incident
rcu: Summarize RCU CPU stall warnings during CSD-lock stalls
rcu: Extract synchronize_rcu_expedited_stall() from synchronize_rcu_expedited_wait()
rcu: Summarize expedited RCU CPU stall warnings during CSD-lock stalls
rcuscale: Provide clear error when async specified without primitives
rcuscale: Make all writer tasks report upon hang
rcuscale: Make rcu_scale_writer() tolerate repeated GFP_KERNEL failure
rcuscale: Use special allocator for rcu_scale_writer()
rcuscale: NULL out top-level pointers to heap memory
rcuscale: Count outstanding callbacks per-task rather than per-CPU
rcu: Defer printing stall-warning backtrace when holding rcu_node lock

Rik van Riel (1):
smp: print only local CPU info when sched_clock goes backward

Ryo Takakura (1):
rcu: Let dump_cpu_task() be used without preemption disabled

Sean Christopherson (1):
context_tracking: Tag context_tracking_enabled_this_cpu() __always_inline

Thorsten Blum (1):
rcu: Annotate struct kvfree_rcu_bulk_data with __counted_by()

Valentin Schneider (25):
treewide: context_tracking: Rename CONTEXT_* into CT_STATE_*
context_tracking, rcu: Rename RCU_DYNTICKS_IDX into CT_RCU_WATCHING
context_tracking, rcu: Rename ct_dynticks() into ct_rcu_watching()
context_tracking, rcu: Rename ct_dynticks_cpu() into ct_rcu_watching_cpu()
context_tracking, rcu: Rename ct_dynticks_cpu_acquire() into ct_rcu_watching_cpu_acquire()
context_tracking, rcu: Rename struct context_tracking .dynticks_nesting into .nesting
context_tracking, rcu: Rename ct_dynticks_nesting() into ct_nesting()
context_tracking, rcu: Rename ct_dynticks_nesting_cpu() into ct_nesting_cpu()
context_tracking, rcu: Rename struct context_tracking .dynticks_nmi_nesting into .nmi_nesting
context_tracking, rcu: Rename ct_dynticks_nmi_nesting() into ct_nmi_nesting()
context_tracking, rcu: Rename ct_dynticks_nmi_nesting_cpu() into ct_nmi_nesting_cpu()
context_tracking, rcu: Rename DYNTICK_IRQ_NONIDLE into CT_NESTING_IRQ_NONIDLE
context_tracking, rcu: Rename rcu_dynticks_task*() into rcu_task*()
context_tracking, rcu: Rename rcu_dynticks_curr_cpu_in_eqs() into rcu_is_watching_curr_cpu()
rcu: Rename rcu_dynticks_eqs_online() into rcu_watching_online()
rcu: Rename rcu_dynticks_in_eqs() into rcu_watching_snap_in_eqs()
rcu: Rename rcu_dynticks_in_eqs_since() into rcu_watching_snap_stopped_since()
rcu: Rename rcu_dynticks_zero_in_eqs() into rcu_watching_zero_in_eqs()
rcu: Rename struct rcu_data .dynticks_snap into .watching_snap
rcu: Rename struct rcu_data .exp_dynticks_snap into .exp_watching_snap
rcu: Rename dyntick_save_progress_counter() into rcu_watching_snap_save()
rcu: Rename rcu_implicit_dynticks_qs() into rcu_watching_snap_recheck()
rcu: Rename rcu_momentary_dyntick_idle() into rcu_momentary_eqs()
rcu: Update stray documentation references to rcu_dynticks_eqs_{enter, exit}()
context_tracking, rcu: Rename rcu_dyntick trace event into rcu_watching

Waiman Long (1):
rcu: Use system_unbound_wq to avoid disturbing isolated CPUs

Zhouyi Zhou (1):
rcutorture: Add CFcommon.arch for arch-specific Kconfig options

Zqiang (1):
rcu-tasks: Fix access non-existent percpu rtpcp variable in rcu_tasks_need_gpcb()

Documentation/RCU/Design/Data-Structures/Data-Structures.rst | 28 +++---
Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst | 8 +-
Documentation/RCU/Design/Memory-Ordering/TreeRCU-dyntick.svg | 8 +-
Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg | 8 +-
Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp.svg | 8 +-
Documentation/RCU/Design/Memory-Ordering/TreeRCU-hotplug.svg | 4 +-
Documentation/RCU/Design/Requirements/Requirements.rst | 3 +-
Documentation/RCU/checklist.rst | 61 ++++++------
Documentation/RCU/whatisRCU.rst | 2 +-
Documentation/admin-guide/kernel-parameters.txt | 20 ++--
arch/Kconfig | 2 +-
arch/arm64/kernel/entry-common.c | 2 +-
arch/powerpc/include/asm/interrupt.h | 6 +-
arch/powerpc/kernel/interrupt.c | 6 +-
arch/powerpc/kernel/syscall.c | 2 +-
arch/x86/entry/common.c | 2 +-
include/linux/context_tracking.h | 32 ++++---
include/linux/context_tracking_state.h | 60 ++++++------
include/linux/entry-common.h | 2 +-
include/linux/rcu_segcblist.h | 6 +-
include/linux/rculist.h | 9 +-
include/linux/rcupdate.h | 15 ++-
include/linux/rcutiny.h | 2 +-
include/linux/rcutree.h | 2 +-
include/linux/smp.h | 6 ++
include/linux/srcutree.h | 15 ++-
include/trace/events/rcu.h | 20 ++--
kernel/context_tracking.c | 140 ++++++++++++++--------------
kernel/entry/common.c | 2 +-
kernel/rcu/rcu.h | 12 ++-
kernel/rcu/rcu_segcblist.c | 11 ---
kernel/rcu/rcu_segcblist.h | 11 +--
kernel/rcu/rcuscale.c | 214 ++++++++++++++++++++++++++++++++++++------
kernel/rcu/rcutorture.c | 121 +++++++++++++++---------
kernel/rcu/refscale.c | 67 ++++++-------
kernel/rcu/srcutree.c | 11 ++-
kernel/rcu/tasks.h | 214 ++++++++++++++++++++++++++++--------------
kernel/rcu/tree.c | 174 ++++++++++++++++------------------
kernel/rcu/tree.h | 10 +-
kernel/rcu/tree_exp.h | 121 +++++++++++++-----------
kernel/rcu/tree_nocb.h | 279 +++++++++++++++++++++----------------------------------
kernel/rcu/tree_plugin.h | 11 ++-
kernel/rcu/tree_stall.h | 16 +++-
kernel/sched/core.c | 6 +-
kernel/smp.c | 38 +++++++-
kernel/stop_machine.c | 2 +-
kernel/trace/trace_osnoise.c | 4 +-
lib/Kconfig.debug | 1 +
tools/rcu/rcu-updaters.sh | 2 -
tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh | 2 +
tools/testing/selftests/rcutorture/bin/torture.sh | 38 +++++---
tools/testing/selftests/rcutorture/configs/rcu/CFcommon | 2 -
tools/testing/selftests/rcutorture/configs/rcu/CFcommon.i686 | 2 +
tools/testing/selftests/rcutorture/configs/rcu/CFcommon.ppc64le | 1 +
tools/testing/selftests/rcutorture/configs/rcu/CFcommon.x86_64 | 2 +
tools/testing/selftests/rcutorture/configs/rcu/TREE07.boot | 1 +
tools/testing/selftests/rcutorture/configs/refscale/TINY | 20 ++++
57 files changed, 1088 insertions(+), 786 deletions(-)
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.i686
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.ppc64le
create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.x86_64
create mode 100644 tools/testing/selftests/rcutorture/configs/refscale/TINY