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.07.26a # HEAD: 34bc7b454dc31f75a0be7ee8ab378135523d7c51: Merge branch 'ctxt.2022.07.05a' into HEAD (2022-07-21 17:46:18 -0700) There are really six more branches for a total of seven, but the other six had to be merged separately as the parent of the above commit here: d38c8fe48354 ("Merge branches 'doc.2022.06.21a', 'fixes.2022.07.19a', 'nocb.2022.07.19a', 'poll.2022.07.21a', 'rcu-tasks.2022.06.21a' and 'torture.2022.06.21a' into HEAD Stephen Rothwell located a conflict with these two commits, the latter already in mainline: 24a9c54182b3 ("context_tracking: Split user tracking Kconfig") 7fd6ef61a5d6 ("LoongArch: Drop these obsolete selects in Kconfig") The branch resolution.2022.07.26a in -rcu provides a sample merge using Stephen's suggested merge-conflict fix: https://lore.kernel.org/all/20220708141246.43111241@xxxxxxxxxxxxxxxx/ ---------------------------------------------------------------- RCU pull request for v5.20 (or whatever) This pull request contains the following branches: doc.2022.06.21a: Documentation updates. fixes.2022.07.19a: Miscellaneous fixes. nocb.2022.07.19a: Callback-offload updates, perhaps most notably a new RCU_NOCB_CPU_DEFAULT_ALL Kconfig option that causes all CPUs to be offloaded at boot time, regardless of kernel boot parameters. This is useful to battery-powered systems such as ChromeOS and Android. In addition, a new RCU_NOCB_CPU_CB_BOOST kernel boot parameter prevents offloaded callbacks from interfering with real-time workloads and with energy-efficiency mechanisms. poll.2022.07.21a: Polled grace-period updates, perhaps most notably making these APIs account for both normal and expedited grace periods. rcu-tasks.2022.06.21a: Tasks RCU updates, perhaps most notably reducing the CPU overhead of RCU tasks trace grace periods by more than a factor of two on a system with 15,000 tasks. The reduction is expected to increase with the number of tasks, so it seems reasonable to hypothesize that a system with 150,000 tasks might see a 20-fold reduction in CPU overhead. torture.2022.06.21a: Torture-test updates. ctxt.2022.07.05a: Updates that merge RCU's dyntick-idle tracking into context tracking, thus reducing the overhead of transitioning to kernel mode from either idle or nohz_full userspace execution for kernels that track context independently of RCU. This is expected to be helpful primarily for kernels built with CONFIG_NO_HZ_FULL=y. ---------------------------------------------------------------- Anna-Maria Behnsen (1): rcu/torture: Change order of warning and trace dump Chen Zhongjin (1): locking/csd_lock: Change csdlock_debug from early_param to __setup Frederic Weisbecker (21): context_tracking: Remove unused context_tracking_in_user() context_tracking: Add a note about noinstr VS unsafe context tracking functions rcutorture: Fix ksoftirqd boosting timing and iteration context_tracking: Rename __context_tracking_enter/exit() to __ct_user_enter/exit() context_tracking: Rename context_tracking_user_enter/exit() to user_enter/exit_callable() context_tracking: Rename context_tracking_enter/exit() to ct_user_enter/exit() context_tracking: Rename context_tracking_cpu_set() to ct_cpu_track_user() context_tracking: Split user tracking Kconfig context_tracking: Take idle eqs entrypoints over RCU context_tracking: Take IRQ eqs entrypoints over RCU context_tracking: Take NMI eqs entrypoints over RCU rcu/context-tracking: Remove rcu_irq_enter/exit() rcu/context_tracking: Move dynticks counter to context tracking rcu/context_tracking: Move dynticks_nesting to context tracking rcu/context_tracking: Move dynticks_nmi_nesting to context tracking rcu/context-tracking: Move deferred nocb resched to context tracking rcu/context-tracking: Move RCU-dynticks internal functions to context_tracking rcu/context-tracking: Remove unused and/or unecessary middle functions context_tracking: Convert state to atomic_t MAINTAINERS: Add Paul as context tracking maintainer rcu/nocb: Add/del rdp to iterate from rcuog itself Joel Fernandes (1): rcu/nocb: Add an option to offload all CPUs on boot Joel Fernandes (Google) (1): rcu/kvfree: Remove useless monitor_todo flag Johannes Berg (1): rcu: tiny: Record kvfree_call_rcu() call stack for KASAN Li Qiong (1): rcutorture: Handle failure of memory allocation functions Neeraj Upadhyay (2): srcu: Make expedited RCU grace periods block even less frequently rcu/tree: Add comment to describe GP-done condition in fqs loop Patrick Wang (1): rcu: Avoid tracing a few functions executed in stop machine Paul E. McKenney (57): rcu: Make normal polling GP be more precise about sequence numbers rcu: Provide a get_completed_synchronize_rcu() function rcutorture: Validate get_completed_synchronize_rcu() rcu-tasks: Check for abandoned callbacks rcu-tasks: Split rcu_tasks_one_gp() from rcu_tasks_kthread() rcu-tasks: Move synchronize_rcu_tasks_generic() down rcu-tasks: Drive synchronous grace periods from calling task rcu-tasks: Merge state into .b.need_qs and atomically update rcu-tasks: Remove rcu_tasks_trace_postgp() wait for counter rcu-tasks: Make trc_read_check_handler() fetch ->trc_reader_nesting only once rcu-tasks: Idle tasks on offline CPUs are in quiescent states rcu-tasks: Handle idle tasks for recently offlined CPUs rcu-tasks: RCU Tasks Trace grace-period kthread has implicit QS rcu-tasks: Make rcu_note_context_switch() unconditionally call rcu_tasks_qs() rcu-tasks: Simplify trc_inspect_reader() QS logic rcu-tasks: Add slow-IPI indicator to RCU Tasks Trace stall warnings rcu-tasks: Flag offline CPUs in RCU Tasks Trace stall warnings rcu-tasks: Make RCU Tasks Trace stall warnings print full .b.need_qs field rcu-tasks: Make RCU Tasks Trace stall warning handle idle offline tasks rcu-tasks: Add data structures for lightweight grace periods rcu-tasks: Track blocked RCU Tasks Trace readers rcu-tasks: Untrack blocked RCU Tasks Trace at reader end rcu-tasks: Add blocked-task indicator to RCU Tasks Trace stall warnings rcu-tasks: Move rcu_tasks_trace_pertask() before rcu_tasks_trace_pregp_step() rcu-tasks: Avoid rcu_tasks_trace_pertask() duplicate list additions rcu-tasks: Scan running tasks for RCU Tasks Trace readers rcu-tasks: Pull in tasks blocked within RCU Tasks Trace readers rcu-tasks: Stop RCU Tasks Trace from scanning idle tasks torture: Make kvm-remote.sh announce which system is being waited on rcu: Apply noinstr to rcu_idle_enter() and rcu_idle_exit() rcutorture: Update rcutorture.fwd_progress help text doc: Document the rcutree.rcu_divisor kernel boot parameter doc: Document rcutree.nocb_nobypass_lim_per_jiffy kernel parameter rcu-tasks: Stop RCU Tasks Trace from scanning full tasks list rcu-tasks: Maintain a count of tasks blocking RCU Tasks Trace grace period rcu-tasks: Eliminate RCU Tasks Trace IPIs to online CPUs rcu-tasks: Disable and enable CPU hotplug in same function rcu-tasks: Update comments rcu-tasks: Be more patient for RCU Tasks boot-time testing rcutorture: Simplify rcu_torture_read_exit_child() loop torture: Adjust to again produce debugging information rcutorture: Make failure indication note reader-batch overflow torture: Create kvm-check-branches.sh output in proper location context_tracking: Use arch_atomic_read() in __ct_state for KASAN srcu: Block less aggressively for expedited grace periods rcu: Decrease FQS scan wait time in case of callback overloading rcu: Forbid RCU_STRICT_GRACE_PERIOD in TINY_RCU kernels rcu: Initialize first_gp_fqs at declaration in rcu_gp_fqs() rcu: Switch polled grace-period APIs to ->gp_seq_polled rcu: Make polled grace-period API account for expedited grace periods rcu: Make Tiny RCU grace periods visible to polled APIs rcutorture: Verify that polled GP API sees synchronous grace periods rcu: Add polled expedited grace-period primitives rcutorture: Test polled expedited grace-period primitives rcu: Diagnose extended sync_rcu_do_polled_gp() loops Merge branches 'doc.2022.06.21a', 'fixes.2022.07.19a', 'nocb.2022.07.19a', 'poll.2022.07.21a', 'rcu-tasks.2022.06.21a' and 'torture.2022.06.21a' into HEAD Merge branch 'ctxt.2022.07.05a' into HEAD Uladzislau Rezki (Sony) (1): rcu/nocb: Add option to opt rcuo kthreads out of RT priority Waiman Long (1): rcu-tasks: Use delayed_work to delay rcu_tasks_verify_self_tests() Zqiang (13): rcu: Dump rcuc kthread status for CPUs not reporting quiescent state rcutorture: Fix memory leak in rcu_test_debug_objects() rcuscale: Fix smp_processor_id()-in-preemptible warnings refscale: Convert test_lock spinlock to raw_spinlock rcu: Add rnp->cbovldmask check in rcutree_migrate_callbacks() rcu: Immediately boost preempted readers for strict grace periods rcu: Cleanup RCU urgency state for offline CPU rcu/nocb: Invert rcu_state.barrier_mutex VS hotplug lock locking order rcu/nocb: Fix NOCB kthreads spawn failure with rcu_nocb_rdp_deoffload() direct call rcu: Add nocb_cb_kthread check to rcu_is_callbacks_kthread() rcu/nocb: Avoid polling when my_rdp->nocb_head_rdp list is empty rcu: Put panic_on_rcu_stall() after expedited RCU CPU stall warnings rcu: Add irqs-disabled indicator to expedited RCU CPU stall warnings .../RCU/Design/Requirements/Requirements.rst | 10 +- Documentation/RCU/stallwarn.rst | 6 +- Documentation/admin-guide/kernel-parameters.txt | 52 ++ .../time/context-tracking/arch-support.txt | 6 +- MAINTAINERS | 1 + arch/Kconfig | 8 +- arch/arm/Kconfig | 2 +- arch/arm/kernel/entry-common.S | 4 +- arch/arm/kernel/entry-header.S | 12 +- arch/arm/mach-imx/cpuidle-imx6q.c | 5 +- arch/arm64/Kconfig | 2 +- arch/arm64/kernel/entry-common.c | 14 +- arch/csky/Kconfig | 2 +- arch/csky/kernel/entry.S | 8 +- arch/loongarch/Kconfig | 2 +- arch/mips/Kconfig | 2 +- arch/powerpc/Kconfig | 2 +- arch/powerpc/include/asm/context_tracking.h | 2 +- arch/riscv/Kconfig | 2 +- arch/riscv/kernel/entry.S | 12 +- arch/sparc/Kconfig | 2 +- arch/sparc/kernel/rtrap_64.S | 2 +- arch/x86/Kconfig | 4 +- arch/x86/mm/fault.c | 2 +- arch/xtensa/Kconfig | 2 +- arch/xtensa/kernel/entry.S | 8 +- drivers/acpi/processor_idle.c | 5 +- drivers/cpuidle/cpuidle-psci.c | 8 +- drivers/cpuidle/cpuidle-riscv-sbi.c | 8 +- drivers/cpuidle/cpuidle.c | 9 +- include/linux/context_tracking.h | 95 +-- include/linux/context_tracking_irq.h | 21 + include/linux/context_tracking_state.h | 113 +++- include/linux/entry-common.h | 10 +- include/linux/hardirq.h | 12 +- include/linux/rcupdate.h | 45 +- include/linux/rcupdate_trace.h | 2 +- include/linux/rcutiny.h | 27 +- include/linux/rcutree.h | 11 +- include/linux/sched.h | 4 +- include/linux/tracepoint.h | 4 +- init/Kconfig | 4 +- init/init_task.c | 1 + kernel/cfi.c | 4 +- kernel/context_tracking.c | 617 +++++++++++++++++-- kernel/cpu_pm.c | 8 +- kernel/entry/common.c | 16 +- kernel/extable.c | 4 +- kernel/fork.c | 1 + kernel/locking/lockdep.c | 2 +- kernel/rcu/Kconfig | 31 + kernel/rcu/Kconfig.debug | 2 +- kernel/rcu/rcu.h | 19 +- kernel/rcu/rcuscale.c | 1 + kernel/rcu/rcutorture.c | 247 +++++--- kernel/rcu/refscale.c | 18 +- kernel/rcu/srcutree.c | 98 ++- kernel/rcu/tasks.h | 541 ++++++++++------- kernel/rcu/tiny.c | 25 +- kernel/rcu/tree.c | 660 ++++++--------------- kernel/rcu/tree.h | 21 +- kernel/rcu/tree_exp.h | 115 +++- kernel/rcu/tree_nocb.h | 266 ++++++--- kernel/rcu/tree_plugin.h | 82 +-- kernel/rcu/tree_stall.h | 55 +- kernel/rcu/update.c | 15 +- kernel/sched/core.c | 34 +- kernel/sched/idle.c | 10 +- kernel/sched/sched.h | 1 + kernel/smp.c | 4 +- kernel/softirq.c | 4 +- kernel/time/Kconfig | 37 +- kernel/time/tick-sched.c | 2 +- kernel/trace/trace.c | 8 +- .../selftests/rcutorture/bin/kvm-check-branches.sh | 11 +- .../testing/selftests/rcutorture/bin/kvm-remote.sh | 1 + tools/testing/selftests/rcutorture/bin/kvm.sh | 6 +- 77 files changed, 2216 insertions(+), 1303 deletions(-) create mode 100644 include/linux/context_tracking_irq.h