[PATCH rcu 0/23] RCU/context-tracking updates for v5.20

From: Paul E. McKenney
Date: Mon Jun 20 2022 - 19:12:12 EST


Hello!

This series merges 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. (Primarily for NO_HZ_FULL kernels.)

1. Dump rcuc kthread status for CPUs not reporting quiescent state,
courtesy of Zqiang.

2. Apply noinstr to rcu_idle_enter() and rcu_idle_exit().

3. context_tracking: Remove unused context_tracking_in_user(),
courtesy of Frederic Weisbecker.

4. context_tracking: Add a note about noinstr VS unsafe context
tracking functions, courtesy of Frederic Weisbecker.

5. context_tracking: Rename __context_tracking_enter/exit() to
__ct_user_enter/exit(), courtesy of Frederic Weisbecker.

6. context_tracking: Rename context_tracking_user_enter/exit()
to user_enter/exit_callable(), courtesy of Frederic Weisbecker.

7. context_tracking: Rename context_tracking_enter/exit() to
ct_user_enter/exit(), courtesy of Frederic Weisbecker.

8. context_tracking: Rename context_tracking_cpu_set() to
ct_cpu_track_user(), courtesy of Frederic Weisbecker.

9. context_tracking: Split user tracking Kconfig, courtesy of
Frederic Weisbecker.

10. context_tracking: Take idle eqs entrypoints over RCU, courtesy
of Frederic Weisbecker.

11. context_tracking: Take IRQ eqs entrypoints over RCU, courtesy
of Frederic Weisbecker.

12. context_tracking: Take NMI eqs entrypoints over RCU, courtesy
of Frederic Weisbecker.

13. rcu/context-tracking: Remove rcu_irq_enter/exit(), courtesy of
Frederic Weisbecker.

14. rcu/context_tracking: Move dynticks counter to context tracking,
courtesy of Frederic Weisbecker.

15. rcu/context_tracking: Move dynticks_nesting to context tracking,
courtesy of Frederic Weisbecker.

16. rcu/context_tracking: Move dynticks_nmi_nesting to context
tracking, courtesy of Frederic Weisbecker.

17. rcu/context-tracking: Move deferred nocb resched to context
tracking, courtesy of Frederic Weisbecker.

18. rcu/context-tracking: Move RCU-dynticks internal functions to
context_tracking, courtesy of Frederic Weisbecker.

19. rcu/context-tracking: Remove unused and/or unecessary middle
functions, courtesy of Frederic Weisbecker.

20. context_tracking: Convert state to atomic_t, courtesy of Frederic
Weisbecker.

21. rcu/context_tracking: Merge dynticks counter and context tracking
states, courtesy of Frederic Weisbecker.

22. MAINTAINERS: Add Paul as context tracking maintainer, courtesy
of Frederic Weisbecker.

23. context_tracking: Interrupts always disabled for ct_idle_exit(),
courtesy of Peter Zijlstra.

Thanx, Paul

------------------------------------------------------------------------

Documentation/RCU/Design/Requirements/Requirements.rst | 2
Documentation/RCU/stallwarn.rst | 6
arch/Kconfig | 4
arch/arm/kernel/entry-header.S | 4
arch/arm64/kernel/entry-common.c | 8
arch/csky/kernel/entry.S | 4
arch/riscv/kernel/entry.S | 6
b/Documentation/RCU/Design/Requirements/Requirements.rst | 10
b/Documentation/RCU/stallwarn.rst | 4
b/Documentation/features/time/context-tracking/arch-support.txt | 6
b/MAINTAINERS | 1
b/arch/Kconfig | 4
b/arch/arm/Kconfig | 2
b/arch/arm/kernel/entry-common.S | 4
b/arch/arm/kernel/entry-header.S | 8
b/arch/arm/mach-imx/cpuidle-imx6q.c | 5
b/arch/arm64/Kconfig | 2
b/arch/arm64/kernel/entry-common.c | 6
b/arch/csky/Kconfig | 2
b/arch/csky/kernel/entry.S | 4
b/arch/mips/Kconfig | 2
b/arch/powerpc/Kconfig | 2
b/arch/powerpc/include/asm/context_tracking.h | 2
b/arch/riscv/Kconfig | 2
b/arch/riscv/kernel/entry.S | 6
b/arch/sparc/Kconfig | 2
b/arch/sparc/kernel/rtrap_64.S | 2
b/arch/x86/Kconfig | 4
b/arch/x86/mm/fault.c | 2
b/drivers/acpi/processor_idle.c | 5
b/drivers/cpuidle/cpuidle-psci.c | 8
b/drivers/cpuidle/cpuidle-riscv-sbi.c | 8
b/drivers/cpuidle/cpuidle.c | 9
b/include/linux/context_tracking.h | 12
b/include/linux/context_tracking_irq.h | 17
b/include/linux/context_tracking_state.h | 5
b/include/linux/entry-common.h | 10
b/include/linux/hardirq.h | 4
b/include/linux/rcupdate.h | 2
b/include/linux/rcutiny.h | 4
b/include/linux/rcutree.h | 4
b/include/linux/tracepoint.h | 4
b/init/Kconfig | 4
b/kernel/cfi.c | 4
b/kernel/context_tracking.c | 34
b/kernel/cpu_pm.c | 8
b/kernel/entry/common.c | 12
b/kernel/extable.c | 4
b/kernel/locking/lockdep.c | 2
b/kernel/rcu/Kconfig | 2
b/kernel/rcu/rcu.h | 4
b/kernel/rcu/tree.c | 14
b/kernel/rcu/tree.h | 1
b/kernel/rcu/tree_exp.h | 2
b/kernel/rcu/tree_plugin.h | 38
b/kernel/rcu/tree_stall.h | 49
b/kernel/rcu/update.c | 2
b/kernel/sched/core.c | 2
b/kernel/sched/idle.c | 10
b/kernel/sched/sched.h | 1
b/kernel/softirq.c | 4
b/kernel/time/Kconfig | 31
b/kernel/time/tick-sched.c | 2
b/kernel/trace/trace.c | 6
include/linux/context_tracking.h | 91 -
include/linux/context_tracking_irq.h | 4
include/linux/context_tracking_state.h | 144 +
include/linux/hardirq.h | 8
include/linux/rcupdate.h | 19
include/linux/rcutiny.h | 2
include/linux/rcutree.h | 5
kernel/context_tracking.c | 808 +++++++---
kernel/entry/common.c | 4
kernel/rcu/tree.c | 572 -------
kernel/rcu/tree.h | 7
kernel/rcu/tree_stall.h | 12
kernel/time/Kconfig | 6
kernel/trace/trace.c | 2
78 files changed, 1142 insertions(+), 986 deletions(-)