Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21bbb39c authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Linus Torvalds
Browse files

rcu: move PREEMPT_RCU config option back under PREEMPT



The original preemptible-RCU patch put the choice between classic and
preemptible RCU into kernel/Kconfig.preempt, which resulted in build failures
on machines not supporting CONFIG_PREEMPT.  This choice was therefore moved to
init/Kconfig, which worked, but placed the choice between classic and
preemptible RCU at the top level, a very obtuse choice indeed.

This patch changes from the Kconfig "choice" mechanism to a pair of booleans,
only one of which (CONFIG_PREEMPT_RCU) is user-visible, and is located in
kernel/Kconfig.preempt, where one would expect it to be.  The other
(CONFIG_CLASSIC_RCU) is in init/Kconfig so that it is available to all
architectures, hopefully avoiding build breakage.  Thanks to Roman Zippel for
suggesting this approach.

Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
Cc: Dipankar Sarma <dipankar@in.ibm.com>
Cc: Josh Triplett <josh@fre...
parent f47831fa
Loading
Loading
Loading
Loading
+3 −31
Original line number Diff line number Diff line
@@ -865,38 +865,10 @@ source "block/Kconfig"
config PREEMPT_NOTIFIERS
	bool

choice
	prompt "RCU implementation type:"
	default CLASSIC_RCU
	help
	  This allows you to choose either the classic RCU implementation
	  that is designed for best read-side performance on non-realtime
	  systems, or the preemptible RCU implementation for best latency
	  on realtime systems.  Note that some kernel preemption modes
	  will restrict your choice.

	  Select the default if you are unsure.

config CLASSIC_RCU
	bool "Classic RCU"
	def_bool !PREEMPT_RCU
	help
	  This option selects the classic RCU implementation that is
	  designed for best read-side performance on non-realtime
	  systems.

	  Say Y if you are unsure.

config PREEMPT_RCU
	bool "Preemptible RCU"
	depends on PREEMPT
	help
	  This option reduces the latency of the kernel by making certain
	  RCU sections preemptible. Normally RCU code is non-preemptible, if
	  this option is selected then read-only RCU sections become
	  preemptible. This helps latency, but may expose bugs due to
	  now-naive assumptions about each RCU read-side critical section
	  remaining on a given CPU through its execution.

	  Say N if you are unsure.

endchoice
	  systems.  Classic RCU is the default.  Note that the
	  PREEMPT_RCU symbol is used to select/deselect this option.
+15 −0
Original line number Diff line number Diff line
@@ -52,8 +52,23 @@ config PREEMPT

endchoice

config PREEMPT_RCU
	bool "Preemptible RCU"
	depends on PREEMPT
	default n
	help
	  This option reduces the latency of the kernel by making certain
	  RCU sections preemptible. Normally RCU code is non-preemptible, if
	  this option is selected then read-only RCU sections become
	  preemptible. This helps latency, but may expose bugs due to
	  now-naive assumptions about each RCU read-side critical section
	  remaining on a given CPU through its execution.

	  Say N if you are unsure.

config RCU_TRACE
	bool "Enable tracing for RCU - currently stats in debugfs"
	depends on PREEMPT_RCU
	select DEBUG_FS
	default y
	help