Commit 21bbb39c376ce6beeeb549d155f0d53dc76ed000
Committed by
Linus Torvalds
1 parent
f47831faba
Exists in
master
and in
4 other branches
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: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> Acked-by: Steven Rostedt <rostedt@goodmis.org> Cc: Dipankar Sarma <dipankar@in.ibm.com> Cc: Josh Triplett <josh@freedesktop.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Roman Zippel <zippel@linux-m68k.org> Cc: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 18 additions and 31 deletions Side-by-side Diff
init/Kconfig
... | ... | @@ -865,39 +865,11 @@ |
865 | 865 | config PREEMPT_NOTIFIERS |
866 | 866 | bool |
867 | 867 | |
868 | -choice | |
869 | - prompt "RCU implementation type:" | |
870 | - default CLASSIC_RCU | |
871 | - help | |
872 | - This allows you to choose either the classic RCU implementation | |
873 | - that is designed for best read-side performance on non-realtime | |
874 | - systems, or the preemptible RCU implementation for best latency | |
875 | - on realtime systems. Note that some kernel preemption modes | |
876 | - will restrict your choice. | |
877 | - | |
878 | - Select the default if you are unsure. | |
879 | - | |
880 | 868 | config CLASSIC_RCU |
881 | - bool "Classic RCU" | |
869 | + def_bool !PREEMPT_RCU | |
882 | 870 | help |
883 | 871 | This option selects the classic RCU implementation that is |
884 | 872 | designed for best read-side performance on non-realtime |
885 | - systems. | |
886 | - | |
887 | - Say Y if you are unsure. | |
888 | - | |
889 | -config PREEMPT_RCU | |
890 | - bool "Preemptible RCU" | |
891 | - depends on PREEMPT | |
892 | - help | |
893 | - This option reduces the latency of the kernel by making certain | |
894 | - RCU sections preemptible. Normally RCU code is non-preemptible, if | |
895 | - this option is selected then read-only RCU sections become | |
896 | - preemptible. This helps latency, but may expose bugs due to | |
897 | - now-naive assumptions about each RCU read-side critical section | |
898 | - remaining on a given CPU through its execution. | |
899 | - | |
900 | - Say N if you are unsure. | |
901 | - | |
902 | -endchoice | |
873 | + systems. Classic RCU is the default. Note that the | |
874 | + PREEMPT_RCU symbol is used to select/deselect this option. |
kernel/Kconfig.preempt
... | ... | @@ -52,8 +52,23 @@ |
52 | 52 | |
53 | 53 | endchoice |
54 | 54 | |
55 | +config PREEMPT_RCU | |
56 | + bool "Preemptible RCU" | |
57 | + depends on PREEMPT | |
58 | + default n | |
59 | + help | |
60 | + This option reduces the latency of the kernel by making certain | |
61 | + RCU sections preemptible. Normally RCU code is non-preemptible, if | |
62 | + this option is selected then read-only RCU sections become | |
63 | + preemptible. This helps latency, but may expose bugs due to | |
64 | + now-naive assumptions about each RCU read-side critical section | |
65 | + remaining on a given CPU through its execution. | |
66 | + | |
67 | + Say N if you are unsure. | |
68 | + | |
55 | 69 | config RCU_TRACE |
56 | 70 | bool "Enable tracing for RCU - currently stats in debugfs" |
71 | + depends on PREEMPT_RCU | |
57 | 72 | select DEBUG_FS |
58 | 73 | default y |
59 | 74 | help |