| .. | .. | 
|---|
 | 1 | +# SPDX-License-Identifier: GPL-2.0-only  | 
|---|
| 1 | 2 |  # | 
|---|
| 2 | 3 |  # RCU-related configuration options | 
|---|
| 3 | 4 |  # | 
|---|
| .. | .. | 
|---|
| 6 | 7 |   | 
|---|
| 7 | 8 |  config TREE_RCU | 
|---|
| 8 | 9 |  	bool | 
|---|
| 9 |  | -	default y if !PREEMPT && SMP  | 
|---|
 | 10 | +	default y if SMP  | 
|---|
| 10 | 11 |  	help | 
|---|
| 11 | 12 |  	  This option selects the RCU implementation that is | 
|---|
| 12 | 13 |  	  designed for very large SMP system with hundreds or | 
|---|
| .. | .. | 
|---|
| 15 | 16 |   | 
|---|
| 16 | 17 |  config PREEMPT_RCU | 
|---|
| 17 | 18 |  	bool | 
|---|
| 18 |  | -	default y if PREEMPT  | 
|---|
 | 19 | +	default y if PREEMPTION  | 
|---|
 | 20 | +	select TREE_RCU  | 
|---|
| 19 | 21 |  	help | 
|---|
| 20 | 22 |  	  This option selects the RCU implementation that is | 
|---|
| 21 | 23 |  	  designed for very large SMP systems with hundreds or | 
|---|
| .. | .. | 
|---|
| 27 | 29 |   | 
|---|
| 28 | 30 |  config TINY_RCU | 
|---|
| 29 | 31 |  	bool | 
|---|
| 30 |  | -	default y if !PREEMPT && !SMP  | 
|---|
 | 32 | +	default y if !PREEMPTION && !SMP  | 
|---|
| 31 | 33 |  	help | 
|---|
| 32 | 34 |  	  This option selects the RCU implementation that is | 
|---|
| 33 | 35 |  	  designed for UP systems from which real-time response | 
|---|
| .. | .. | 
|---|
| 68 | 70 |  	help | 
|---|
| 69 | 71 |  	  This option selects the full-fledged version of SRCU. | 
|---|
| 70 | 72 |   | 
|---|
| 71 |  | -config TASKS_RCU  | 
|---|
| 72 |  | -	def_bool PREEMPT  | 
|---|
 | 73 | +config TASKS_RCU_GENERIC  | 
|---|
 | 74 | +	def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU  | 
|---|
| 73 | 75 |  	select SRCU | 
|---|
 | 76 | +	help  | 
|---|
 | 77 | +	  This option enables generic infrastructure code supporting  | 
|---|
 | 78 | +	  task-based RCU implementations.  Not for manual selection.  | 
|---|
 | 79 | +  | 
|---|
 | 80 | +config TASKS_RCU  | 
|---|
 | 81 | +	def_bool PREEMPTION  | 
|---|
| 74 | 82 |  	help | 
|---|
| 75 | 83 |  	  This option enables a task-based RCU implementation that uses | 
|---|
| 76 | 84 |  	  only voluntary context switch (not preemption!), idle, and | 
|---|
| 77 |  | -	  user-mode execution as quiescent states.  | 
|---|
 | 85 | +	  user-mode execution as quiescent states.  Not for manual selection.  | 
|---|
 | 86 | +  | 
|---|
 | 87 | +config TASKS_RUDE_RCU  | 
|---|
 | 88 | +	def_bool 0  | 
|---|
 | 89 | +	select IRQ_WORK  | 
|---|
 | 90 | +	help  | 
|---|
 | 91 | +	  This option enables a task-based RCU implementation that uses  | 
|---|
 | 92 | +	  only context switch (including preemption) and user-mode  | 
|---|
 | 93 | +	  execution as quiescent states.  It forces IPIs and context  | 
|---|
 | 94 | +	  switches on all online CPUs, including idle ones, so use  | 
|---|
 | 95 | +	  with caution.  | 
|---|
 | 96 | +  | 
|---|
 | 97 | +config TASKS_TRACE_RCU  | 
|---|
 | 98 | +	def_bool 0  | 
|---|
 | 99 | +	help  | 
|---|
 | 100 | +	  This option enables a task-based RCU implementation that uses  | 
|---|
 | 101 | +	  explicit rcu_read_lock_trace() read-side markers, and allows  | 
|---|
 | 102 | +	  these readers to appear in the idle loop as well as on the CPU  | 
|---|
 | 103 | +	  hotplug code paths.  It can force IPIs on online CPUs, including  | 
|---|
 | 104 | +	  idle ones, so use with caution.  | 
|---|
| 78 | 105 |   | 
|---|
| 79 | 106 |  config RCU_STALL_COMMON | 
|---|
| 80 |  | -	def_bool ( TREE_RCU || PREEMPT_RCU )  | 
|---|
 | 107 | +	def_bool TREE_RCU  | 
|---|
| 81 | 108 |  	help | 
|---|
| 82 | 109 |  	  This option enables RCU CPU stall code that is common between | 
|---|
| 83 | 110 |  	  the TINY and TREE variants of RCU.  The purpose is to allow | 
|---|
| .. | .. | 
|---|
| 85 | 112 |  	  making these warnings mandatory for the tree variants. | 
|---|
| 86 | 113 |   | 
|---|
| 87 | 114 |  config RCU_NEED_SEGCBLIST | 
|---|
| 88 |  | -	def_bool ( TREE_RCU || PREEMPT_RCU || TREE_SRCU )  | 
|---|
| 89 |  | -  | 
|---|
| 90 |  | -config CONTEXT_TRACKING  | 
|---|
| 91 |  | -       bool  | 
|---|
| 92 |  | -  | 
|---|
| 93 |  | -config CONTEXT_TRACKING_FORCE  | 
|---|
| 94 |  | -	bool "Force context tracking"  | 
|---|
| 95 |  | -	depends on CONTEXT_TRACKING  | 
|---|
| 96 |  | -	default y if !NO_HZ_FULL  | 
|---|
| 97 |  | -	help  | 
|---|
| 98 |  | -	  The major pre-requirement for full dynticks to work is to  | 
|---|
| 99 |  | -	  support the context tracking subsystem. But there are also  | 
|---|
| 100 |  | -	  other dependencies to provide in order to make the full  | 
|---|
| 101 |  | -	  dynticks working.  | 
|---|
| 102 |  | -  | 
|---|
| 103 |  | -	  This option stands for testing when an arch implements the  | 
|---|
| 104 |  | -	  context tracking backend but doesn't yet fullfill all the  | 
|---|
| 105 |  | -	  requirements to make the full dynticks feature working.  | 
|---|
| 106 |  | -	  Without the full dynticks, there is no way to test the support  | 
|---|
| 107 |  | -	  for context tracking and the subsystems that rely on it: RCU  | 
|---|
| 108 |  | -	  userspace extended quiescent state and tickless cputime  | 
|---|
| 109 |  | -	  accounting. This option copes with the absence of the full  | 
|---|
| 110 |  | -	  dynticks subsystem by forcing the context tracking on all  | 
|---|
| 111 |  | -	  CPUs in the system.  | 
|---|
| 112 |  | -  | 
|---|
| 113 |  | -	  Say Y only if you're working on the development of an  | 
|---|
| 114 |  | -	  architecture backend for the context tracking.  | 
|---|
| 115 |  | -  | 
|---|
| 116 |  | -	  Say N otherwise, this option brings an overhead that you  | 
|---|
| 117 |  | -	  don't want in production.  | 
|---|
| 118 |  | -  | 
|---|
 | 115 | +	def_bool ( TREE_RCU || TREE_SRCU )  | 
|---|
| 119 | 116 |   | 
|---|
| 120 | 117 |  config RCU_FANOUT | 
|---|
| 121 | 118 |  	int "Tree-based hierarchical RCU fanout value" | 
|---|
| 122 | 119 |  	range 2 64 if 64BIT | 
|---|
| 123 | 120 |  	range 2 32 if !64BIT | 
|---|
| 124 |  | -	depends on (TREE_RCU || PREEMPT_RCU) && RCU_EXPERT  | 
|---|
 | 121 | +	depends on TREE_RCU && RCU_EXPERT  | 
|---|
| 125 | 122 |  	default 64 if 64BIT | 
|---|
| 126 | 123 |  	default 32 if !64BIT | 
|---|
| 127 | 124 |  	help | 
|---|
| .. | .. | 
|---|
| 139 | 136 |   | 
|---|
| 140 | 137 |  config RCU_FANOUT_LEAF | 
|---|
| 141 | 138 |  	int "Tree-based hierarchical RCU leaf-level fanout value" | 
|---|
| 142 |  | -	range 2 64 if 64BIT  | 
|---|
| 143 |  | -	range 2 32 if !64BIT  | 
|---|
| 144 |  | -	depends on (TREE_RCU || PREEMPT_RCU) && RCU_EXPERT  | 
|---|
| 145 |  | -	default 16  | 
|---|
 | 139 | +	range 2 64 if 64BIT && !RCU_STRICT_GRACE_PERIOD  | 
|---|
 | 140 | +	range 2 32 if !64BIT && !RCU_STRICT_GRACE_PERIOD  | 
|---|
 | 141 | +	range 2 3 if RCU_STRICT_GRACE_PERIOD  | 
|---|
 | 142 | +	depends on TREE_RCU && RCU_EXPERT  | 
|---|
 | 143 | +	default 16 if !RCU_STRICT_GRACE_PERIOD  | 
|---|
 | 144 | +	default 2 if RCU_STRICT_GRACE_PERIOD  | 
|---|
| 146 | 145 |  	help | 
|---|
| 147 | 146 |  	  This option controls the leaf-level fanout of hierarchical | 
|---|
| 148 | 147 |  	  implementations of RCU, and allows trading off cache misses | 
|---|
| .. | .. | 
|---|
| 196 | 195 |  	  This option boosts the priority of preempted RCU readers that | 
|---|
| 197 | 196 |  	  block the current preemptible RCU grace period for too long. | 
|---|
| 198 | 197 |  	  This option also prevents heavy loads from blocking RCU | 
|---|
| 199 |  | -	  callback invocation for all flavors of RCU.  | 
|---|
 | 198 | +	  callback invocation.  | 
|---|
| 200 | 199 |   | 
|---|
| 201 | 200 |  	  Say Y here if you are working with real-time apps or heavy loads | 
|---|
| 202 | 201 |  	  Say N here if you are unsure. | 
|---|
| .. | .. | 
|---|
| 216 | 215 |   | 
|---|
| 217 | 216 |  config RCU_NOCB_CPU | 
|---|
| 218 | 217 |  	bool "Offload RCU callback processing from boot-selected CPUs" | 
|---|
| 219 |  | -	depends on TREE_RCU || PREEMPT_RCU  | 
|---|
 | 218 | +	depends on TREE_RCU  | 
|---|
| 220 | 219 |  	depends on RCU_EXPERT || NO_HZ_FULL | 
|---|
| 221 | 220 |  	default n | 
|---|
| 222 | 221 |  	help | 
|---|
| .. | .. | 
|---|
| 225 | 224 |  	  callback invocation to energy-efficient CPUs in battery-powered | 
|---|
| 226 | 225 |  	  asymmetric multiprocessors. | 
|---|
| 227 | 226 |   | 
|---|
| 228 |  | -	  This option offloads callback invocation from the set of  | 
|---|
| 229 |  | -	  CPUs specified at boot time by the rcu_nocbs parameter.  | 
|---|
| 230 |  | -	  For each such CPU, a kthread ("rcuox/N") will be created to  | 
|---|
| 231 |  | -	  invoke callbacks, where the "N" is the CPU being offloaded,  | 
|---|
| 232 |  | -	  and where the "x" is "b" for RCU-bh, "p" for RCU-preempt, and  | 
|---|
| 233 |  | -	  "s" for RCU-sched.  Nothing prevents this kthread from running  | 
|---|
 | 227 | +	  This option offloads callback invocation from the set of CPUs  | 
|---|
 | 228 | +	  specified at boot time by the rcu_nocbs parameter.  For each  | 
|---|
 | 229 | +	  such CPU, a kthread ("rcuox/N") will be created to invoke  | 
|---|
 | 230 | +	  callbacks, where the "N" is the CPU being offloaded, and where  | 
|---|
 | 231 | +	  the "p" for RCU-preempt (PREEMPTION kernels) and "s" for RCU-sched  | 
|---|
 | 232 | +	  (!PREEMPTION kernels).  Nothing prevents this kthread from running  | 
|---|
| 234 | 233 |  	  on the specified CPUs, but (1) the kthreads may be preempted | 
|---|
| 235 | 234 |  	  between each callback, and (2) affinity or cgroups can be used | 
|---|
| 236 | 235 |  	  to force the kthreads to run on whatever set of CPUs is desired. | 
|---|
| .. | .. | 
|---|
| 238 | 237 |  	  Say Y here if you want to help to debug reduced OS jitter. | 
|---|
| 239 | 238 |  	  Say N here if you are unsure. | 
|---|
| 240 | 239 |   | 
|---|
 | 240 | +config TASKS_TRACE_RCU_READ_MB  | 
|---|
 | 241 | +	bool "Tasks Trace RCU readers use memory barriers in user and idle"  | 
|---|
 | 242 | +	depends on RCU_EXPERT  | 
|---|
 | 243 | +	default PREEMPT_RT || NR_CPUS < 8  | 
|---|
 | 244 | +	help  | 
|---|
 | 245 | +	  Use this option to further reduce the number of IPIs sent  | 
|---|
 | 246 | +	  to CPUs executing in userspace or idle during tasks trace  | 
|---|
 | 247 | +	  RCU grace periods.  Given that a reasonable setting of  | 
|---|
 | 248 | +	  the rcupdate.rcu_task_ipi_delay kernel boot parameter  | 
|---|
 | 249 | +	  eliminates such IPIs for many workloads, proper setting  | 
|---|
 | 250 | +	  of this Kconfig option is important mostly for aggressive  | 
|---|
 | 251 | +	  real-time installations and for battery-powered devices,  | 
|---|
 | 252 | +	  hence the default chosen above.  | 
|---|
 | 253 | +  | 
|---|
 | 254 | +	  Say Y here if you hate IPIs.  | 
|---|
 | 255 | +	  Say N here if you hate read-side memory barriers.  | 
|---|
 | 256 | +	  Take the default if you are unsure.  | 
|---|
 | 257 | +  | 
|---|
| 241 | 258 |  endmenu # "RCU Subsystem" | 
|---|