aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2017-05-15 19:26:34 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2017-06-08 21:52:43 -0400
commit44c65ff2e3b0b48250a970183ab53b0602c25764 (patch)
tree6bc765473304d563d36c701e108773786df108a8
parentae91aa0adb14dc33114d566feca2f7cb7a96b8b7 (diff)
rcu: Eliminate NOCBs CPU-state Kconfig options
The CONFIG_RCU_NOCB_CPU_ALL, CONFIG_RCU_NOCB_CPU_NONE, and CONFIG_RCU_NOCB_CPU_ZERO Kconfig options are used only in testing and are redundant with the rcu_nocbs= boot parameter. This commit therefore removes these three Kconfig options and adjusts the rcutorture scripts to use the boot parameter instead. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-rw-r--r--Documentation/kernel-per-CPU-kthreads.txt31
-rw-r--r--Documentation/timers/NO_HZ.txt29
-rw-r--r--init/Kconfig53
-rw-r--r--kernel/rcu/rcu.h4
-rw-r--r--kernel/rcu/tree_plugin.h27
-rw-r--r--tools/testing/selftests/rcutorture/configs/rcu/TREE011
-rw-r--r--tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot1
-rw-r--r--tools/testing/selftests/rcutorture/configs/rcu/TREE051
-rw-r--r--tools/testing/selftests/rcutorture/configs/rcu/TREE081
-rw-r--r--tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot1
-rw-r--r--tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt8
11 files changed, 26 insertions, 131 deletions
diff --git a/Documentation/kernel-per-CPU-kthreads.txt b/Documentation/kernel-per-CPU-kthreads.txt
index df31e30b6a02..2cb7dc5c0e0d 100644
--- a/Documentation/kernel-per-CPU-kthreads.txt
+++ b/Documentation/kernel-per-CPU-kthreads.txt
@@ -109,13 +109,12 @@ SCHED_SOFTIRQ: Do all of the following:
109 on that CPU. If a thread that expects to run on the de-jittered 109 on that CPU. If a thread that expects to run on the de-jittered
110 CPU awakens, the scheduler will send an IPI that can result in 110 CPU awakens, the scheduler will send an IPI that can result in
111 a subsequent SCHED_SOFTIRQ. 111 a subsequent SCHED_SOFTIRQ.
1122. Build with CONFIG_RCU_NOCB_CPU=y, CONFIG_RCU_NOCB_CPU_ALL=y, 1122. CONFIG_NO_HZ_FULL=y and ensure that the CPU to be de-jittered
113 CONFIG_NO_HZ_FULL=y, and, in addition, ensure that the CPU 113 is marked as an adaptive-ticks CPU using the "nohz_full="
114 to be de-jittered is marked as an adaptive-ticks CPU using the 114 boot parameter. This reduces the number of scheduler-clock
115 "nohz_full=" boot parameter. This reduces the number of 115 interrupts that the de-jittered CPU receives, minimizing its
116 scheduler-clock interrupts that the de-jittered CPU receives, 116 chances of being selected to do the load balancing work that
117 minimizing its chances of being selected to do the load balancing 117 runs in SCHED_SOFTIRQ context.
118 work that runs in SCHED_SOFTIRQ context.
1193. To the extent possible, keep the CPU out of the kernel when it 1183. To the extent possible, keep the CPU out of the kernel when it
120 is non-idle, for example, by avoiding system calls and by 119 is non-idle, for example, by avoiding system calls and by
121 forcing both kernel threads and interrupts to execute elsewhere. 120 forcing both kernel threads and interrupts to execute elsewhere.
@@ -135,11 +134,10 @@ HRTIMER_SOFTIRQ: Do all of the following:
135RCU_SOFTIRQ: Do at least one of the following: 134RCU_SOFTIRQ: Do at least one of the following:
1361. Offload callbacks and keep the CPU in either dyntick-idle or 1351. Offload callbacks and keep the CPU in either dyntick-idle or
137 adaptive-ticks state by doing all of the following: 136 adaptive-ticks state by doing all of the following:
138 a. Build with CONFIG_RCU_NOCB_CPU=y, CONFIG_RCU_NOCB_CPU_ALL=y, 137 a. CONFIG_NO_HZ_FULL=y and ensure that the CPU to be
139 CONFIG_NO_HZ_FULL=y, and, in addition ensure that the CPU 138 de-jittered is marked as an adaptive-ticks CPU using the
140 to be de-jittered is marked as an adaptive-ticks CPU using 139 "nohz_full=" boot parameter. Bind the rcuo kthreads to
141 the "nohz_full=" boot parameter. Bind the rcuo kthreads 140 housekeeping CPUs, which can tolerate OS jitter.
142 to housekeeping CPUs, which can tolerate OS jitter.
143 b. To the extent possible, keep the CPU out of the kernel 141 b. To the extent possible, keep the CPU out of the kernel
144 when it is non-idle, for example, by avoiding system 142 when it is non-idle, for example, by avoiding system
145 calls and by forcing both kernel threads and interrupts 143 calls and by forcing both kernel threads and interrupts
@@ -236,11 +234,10 @@ To reduce its OS jitter, do at least one of the following:
236 is feasible only if your workload never requires RCU priority 234 is feasible only if your workload never requires RCU priority
237 boosting, for example, if you ensure frequent idle time on all 235 boosting, for example, if you ensure frequent idle time on all
238 CPUs that might execute within the kernel. 236 CPUs that might execute within the kernel.
2393. Build with CONFIG_RCU_NOCB_CPU=y and CONFIG_RCU_NOCB_CPU_ALL=y, 2373. Build with CONFIG_RCU_NOCB_CPU=y and boot with the rcu_nocbs=
240 which offloads all RCU callbacks to kthreads that can be moved 238 boot parameter offloading RCU callbacks from all CPUs susceptible
241 off of CPUs susceptible to OS jitter. This approach prevents the 239 to OS jitter. This approach prevents the rcuc/%u kthreads from
242 rcuc/%u kthreads from having any work to do, so that they are 240 having any work to do, so that they are never awakened.
243 never awakened.
2444. Ensure that the CPU never enters the kernel, and, in particular, 2414. Ensure that the CPU never enters the kernel, and, in particular,
245 avoid initiating any CPU hotplug operations on this CPU. This is 242 avoid initiating any CPU hotplug operations on this CPU. This is
246 another way of preventing any callbacks from being queued on the 243 another way of preventing any callbacks from being queued on the
diff --git a/Documentation/timers/NO_HZ.txt b/Documentation/timers/NO_HZ.txt
index 6eaf576294f3..2dcaf9adb7a7 100644
--- a/Documentation/timers/NO_HZ.txt
+++ b/Documentation/timers/NO_HZ.txt
@@ -194,32 +194,9 @@ that the RCU callbacks are processed in a timely fashion.
194 194
195Another approach is to offload RCU callback processing to "rcuo" kthreads 195Another approach is to offload RCU callback processing to "rcuo" kthreads
196using the CONFIG_RCU_NOCB_CPU=y Kconfig option. The specific CPUs to 196using the CONFIG_RCU_NOCB_CPU=y Kconfig option. The specific CPUs to
197offload may be selected via several methods: 197offload may be selected using The "rcu_nocbs=" kernel boot parameter,
198 198which takes a comma-separated list of CPUs and CPU ranges, for example,
1991. One of three mutually exclusive Kconfig options specify a 199"1,3-5" selects CPUs 1, 3, 4, and 5.
200 build-time default for the CPUs to offload:
201
202 a. The CONFIG_RCU_NOCB_CPU_NONE=y Kconfig option results in
203 no CPUs being offloaded.
204
205 b. The CONFIG_RCU_NOCB_CPU_ZERO=y Kconfig option causes
206 CPU 0 to be offloaded.
207
208 c. The CONFIG_RCU_NOCB_CPU_ALL=y Kconfig option causes all
209 CPUs to be offloaded. Note that the callbacks will be
210 offloaded to "rcuo" kthreads, and that those kthreads
211 will in fact run on some CPU. However, this approach
212 gives fine-grained control on exactly which CPUs the
213 callbacks run on, along with their scheduling priority
214 (including the default of SCHED_OTHER), and it further
215 allows this control to be varied dynamically at runtime.
216
2172. The "rcu_nocbs=" kernel boot parameter, which takes a comma-separated
218 list of CPUs and CPU ranges, for example, "1,3-5" selects CPUs 1,
219 3, 4, and 5. The specified CPUs will be offloaded in addition to
220 any CPUs specified as offloaded by CONFIG_RCU_NOCB_CPU_ZERO=y or
221 CONFIG_RCU_NOCB_CPU_ALL=y. This means that the "rcu_nocbs=" boot
222 parameter has no effect for kernels built with RCU_NOCB_CPU_ALL=y.
223 200
224The offloaded CPUs will never queue RCU callbacks, and therefore RCU 201The offloaded CPUs will never queue RCU callbacks, and therefore RCU
225never prevents offloaded CPUs from entering either dyntick-idle mode 202never prevents offloaded CPUs from entering either dyntick-idle mode
diff --git a/init/Kconfig b/init/Kconfig
index 3025383ab443..dc431c6109f2 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -709,59 +709,6 @@ config RCU_NOCB_CPU
709 Say Y here if you want to help to debug reduced OS jitter. 709 Say Y here if you want to help to debug reduced OS jitter.
710 Say N here if you are unsure. 710 Say N here if you are unsure.
711 711
712choice
713 prompt "Build-forced no-CBs CPUs"
714 default RCU_NOCB_CPU_NONE
715 depends on RCU_NOCB_CPU
716 help
717 This option allows no-CBs CPUs (whose RCU callbacks are invoked
718 from kthreads rather than from softirq context) to be specified
719 at build time. Additional no-CBs CPUs may be specified by
720 the rcu_nocbs= boot parameter.
721
722config RCU_NOCB_CPU_NONE
723 bool "No build_forced no-CBs CPUs"
724 help
725 This option does not force any of the CPUs to be no-CBs CPUs.
726 Only CPUs designated by the rcu_nocbs= boot parameter will be
727 no-CBs CPUs, whose RCU callbacks will be invoked by per-CPU
728 kthreads whose names begin with "rcuo". All other CPUs will
729 invoke their own RCU callbacks in softirq context.
730
731 Select this option if you want to choose no-CBs CPUs at
732 boot time, for example, to allow testing of different no-CBs
733 configurations without having to rebuild the kernel each time.
734
735config RCU_NOCB_CPU_ZERO
736 bool "CPU 0 is a build_forced no-CBs CPU"
737 help
738 This option forces CPU 0 to be a no-CBs CPU, so that its RCU
739 callbacks are invoked by a per-CPU kthread whose name begins
740 with "rcuo". Additional CPUs may be designated as no-CBs
741 CPUs using the rcu_nocbs= boot parameter will be no-CBs CPUs.
742 All other CPUs will invoke their own RCU callbacks in softirq
743 context.
744
745 Select this if CPU 0 needs to be a no-CBs CPU for real-time
746 or energy-efficiency reasons, but the real reason it exists
747 is to ensure that randconfig testing covers mixed systems.
748
749config RCU_NOCB_CPU_ALL
750 bool "All CPUs are build_forced no-CBs CPUs"
751 help
752 This option forces all CPUs to be no-CBs CPUs. The rcu_nocbs=
753 boot parameter will be ignored. All CPUs' RCU callbacks will
754 be executed in the context of per-CPU rcuo kthreads created for
755 this purpose. Assuming that the kthreads whose names start with
756 "rcuo" are bound to "housekeeping" CPUs, this reduces OS jitter
757 on the remaining CPUs, but might decrease memory locality during
758 RCU-callback invocation, thus potentially degrading throughput.
759
760 Select this if all CPUs need to be no-CBs CPUs for real-time
761 or energy-efficiency reasons.
762
763endchoice
764
765endmenu # "RCU Subsystem" 712endmenu # "RCU Subsystem"
766 713
767config BUILD_BIN2C 714config BUILD_BIN2C
diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h
index d06c42deee0b..808b8c85f626 100644
--- a/kernel/rcu/rcu.h
+++ b/kernel/rcu/rcu.h
@@ -564,9 +564,7 @@ void rcu_bh_force_quiescent_state(void);
564void rcu_sched_force_quiescent_state(void); 564void rcu_sched_force_quiescent_state(void);
565#endif /* #else #ifdef CONFIG_TINY_RCU */ 565#endif /* #else #ifdef CONFIG_TINY_RCU */
566 566
567#if defined(CONFIG_RCU_NOCB_CPU_ALL) 567#ifdef CONFIG_RCU_NOCB_CPU
568static inline bool rcu_is_nocb_cpu(int cpu) { return true; }
569#elif defined(CONFIG_RCU_NOCB_CPU)
570bool rcu_is_nocb_cpu(int cpu); 568bool rcu_is_nocb_cpu(int cpu);
571#else 569#else
572static inline bool rcu_is_nocb_cpu(int cpu) { return false; } 570static inline bool rcu_is_nocb_cpu(int cpu) { return false; }
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 43f2f8026b4a..908b309d60d7 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -1296,8 +1296,7 @@ static void rcu_prepare_kthreads(int cpu)
1296int rcu_needs_cpu(u64 basemono, u64 *nextevt) 1296int rcu_needs_cpu(u64 basemono, u64 *nextevt)
1297{ 1297{
1298 *nextevt = KTIME_MAX; 1298 *nextevt = KTIME_MAX;
1299 return IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL) 1299 return rcu_cpu_has_callbacks(NULL);
1300 ? 0 : rcu_cpu_has_callbacks(NULL);
1301} 1300}
1302 1301
1303/* 1302/*
@@ -1409,10 +1408,6 @@ int rcu_needs_cpu(u64 basemono, u64 *nextevt)
1409 unsigned long dj; 1408 unsigned long dj;
1410 1409
1411 RCU_LOCKDEP_WARN(!irqs_disabled(), "rcu_needs_cpu() invoked with irqs enabled!!!"); 1410 RCU_LOCKDEP_WARN(!irqs_disabled(), "rcu_needs_cpu() invoked with irqs enabled!!!");
1412 if (IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL)) {
1413 *nextevt = KTIME_MAX;
1414 return 0;
1415 }
1416 1411
1417 /* Snapshot to detect later posting of non-lazy callback. */ 1412 /* Snapshot to detect later posting of non-lazy callback. */
1418 rdtp->nonlazy_posted_snap = rdtp->nonlazy_posted; 1413 rdtp->nonlazy_posted_snap = rdtp->nonlazy_posted;
@@ -1462,8 +1457,7 @@ static void rcu_prepare_for_idle(void)
1462 int tne; 1457 int tne;
1463 1458
1464 RCU_LOCKDEP_WARN(!irqs_disabled(), "rcu_prepare_for_idle() invoked with irqs enabled!!!"); 1459 RCU_LOCKDEP_WARN(!irqs_disabled(), "rcu_prepare_for_idle() invoked with irqs enabled!!!");
1465 if (IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL) || 1460 if (rcu_is_nocb_cpu(smp_processor_id()))
1466 rcu_is_nocb_cpu(smp_processor_id()))
1467 return; 1461 return;
1468 1462
1469 /* Handle nohz enablement switches conservatively. */ 1463 /* Handle nohz enablement switches conservatively. */
@@ -1518,8 +1512,7 @@ static void rcu_prepare_for_idle(void)
1518static void rcu_cleanup_after_idle(void) 1512static void rcu_cleanup_after_idle(void)
1519{ 1513{
1520 RCU_LOCKDEP_WARN(!irqs_disabled(), "rcu_cleanup_after_idle() invoked with irqs enabled!!!"); 1514 RCU_LOCKDEP_WARN(!irqs_disabled(), "rcu_cleanup_after_idle() invoked with irqs enabled!!!");
1521 if (IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL) || 1515 if (rcu_is_nocb_cpu(smp_processor_id()))
1522 rcu_is_nocb_cpu(smp_processor_id()))
1523 return; 1516 return;
1524 if (rcu_try_advance_all_cbs()) 1517 if (rcu_try_advance_all_cbs())
1525 invoke_rcu_core(); 1518 invoke_rcu_core();
@@ -1786,7 +1779,6 @@ static void rcu_init_one_nocb(struct rcu_node *rnp)
1786 init_swait_queue_head(&rnp->nocb_gp_wq[1]); 1779 init_swait_queue_head(&rnp->nocb_gp_wq[1]);
1787} 1780}
1788 1781
1789#ifndef CONFIG_RCU_NOCB_CPU_ALL
1790/* Is the specified CPU a no-CBs CPU? */ 1782/* Is the specified CPU a no-CBs CPU? */
1791bool rcu_is_nocb_cpu(int cpu) 1783bool rcu_is_nocb_cpu(int cpu)
1792{ 1784{
@@ -1794,7 +1786,6 @@ bool rcu_is_nocb_cpu(int cpu)
1794 return cpumask_test_cpu(cpu, rcu_nocb_mask); 1786 return cpumask_test_cpu(cpu, rcu_nocb_mask);
1795 return false; 1787 return false;
1796} 1788}
1797#endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */
1798 1789
1799/* 1790/*
1800 * Kick the leader kthread for this NOCB group. 1791 * Kick the leader kthread for this NOCB group.
@@ -2253,10 +2244,6 @@ void __init rcu_init_nohz(void)
2253 bool need_rcu_nocb_mask = true; 2244 bool need_rcu_nocb_mask = true;
2254 struct rcu_state *rsp; 2245 struct rcu_state *rsp;
2255 2246
2256#ifdef CONFIG_RCU_NOCB_CPU_NONE
2257 need_rcu_nocb_mask = false;
2258#endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
2259
2260#if defined(CONFIG_NO_HZ_FULL) 2247#if defined(CONFIG_NO_HZ_FULL)
2261 if (tick_nohz_full_running && cpumask_weight(tick_nohz_full_mask)) 2248 if (tick_nohz_full_running && cpumask_weight(tick_nohz_full_mask))
2262 need_rcu_nocb_mask = true; 2249 need_rcu_nocb_mask = true;
@@ -2272,14 +2259,6 @@ void __init rcu_init_nohz(void)
2272 if (!have_rcu_nocb_mask) 2259 if (!have_rcu_nocb_mask)
2273 return; 2260 return;
2274 2261
2275#ifdef CONFIG_RCU_NOCB_CPU_ZERO
2276 pr_info("\tOffload RCU callbacks from CPU 0\n");
2277 cpumask_set_cpu(0, rcu_nocb_mask);
2278#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ZERO */
2279#ifdef CONFIG_RCU_NOCB_CPU_ALL
2280 pr_info("\tOffload RCU callbacks from all CPUs\n");
2281 cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
2282#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
2283#if defined(CONFIG_NO_HZ_FULL) 2262#if defined(CONFIG_NO_HZ_FULL)
2284 if (tick_nohz_full_running) 2263 if (tick_nohz_full_running)
2285 cpumask_or(rcu_nocb_mask, rcu_nocb_mask, tick_nohz_full_mask); 2264 cpumask_or(rcu_nocb_mask, rcu_nocb_mask, tick_nohz_full_mask);
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE01 b/tools/testing/selftests/rcutorture/configs/rcu/TREE01
index 92ca49f90ef9..b5b53973c01e 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE01
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE01
@@ -12,7 +12,6 @@ CONFIG_HOTPLUG_CPU=y
12CONFIG_MAXSMP=y 12CONFIG_MAXSMP=y
13CONFIG_CPUMASK_OFFSTACK=y 13CONFIG_CPUMASK_OFFSTACK=y
14CONFIG_RCU_NOCB_CPU=y 14CONFIG_RCU_NOCB_CPU=y
15CONFIG_RCU_NOCB_CPU_ZERO=y
16CONFIG_DEBUG_LOCK_ALLOC=n 15CONFIG_DEBUG_LOCK_ALLOC=n
17CONFIG_RCU_BOOST=n 16CONFIG_RCU_BOOST=n
18CONFIG_DEBUG_OBJECTS_RCU_HEAD=n 17CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot b/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot
index 89705ed79596..1d14e1383016 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot
@@ -2,3 +2,4 @@ rcutorture.torture_type=rcu_bh maxcpus=8
2rcutree.gp_preinit_delay=3 2rcutree.gp_preinit_delay=3
3rcutree.gp_init_delay=3 3rcutree.gp_init_delay=3
4rcutree.gp_cleanup_delay=3 4rcutree.gp_cleanup_delay=3
5rcu_nocbs=0
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE05 b/tools/testing/selftests/rcutorture/configs/rcu/TREE05
index 1257d3227b1e..2dde0d9964e3 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE05
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE05
@@ -13,7 +13,6 @@ CONFIG_HOTPLUG_CPU=y
13CONFIG_RCU_FANOUT=6 13CONFIG_RCU_FANOUT=6
14CONFIG_RCU_FANOUT_LEAF=6 14CONFIG_RCU_FANOUT_LEAF=6
15CONFIG_RCU_NOCB_CPU=y 15CONFIG_RCU_NOCB_CPU=y
16CONFIG_RCU_NOCB_CPU_NONE=y
17CONFIG_DEBUG_LOCK_ALLOC=y 16CONFIG_DEBUG_LOCK_ALLOC=y
18CONFIG_PROVE_LOCKING=y 17CONFIG_PROVE_LOCKING=y
19#CHECK#CONFIG_PROVE_RCU=y 18#CHECK#CONFIG_PROVE_RCU=y
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE08 b/tools/testing/selftests/rcutorture/configs/rcu/TREE08
index 099cc63c6a3b..fb1c763c10c5 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE08
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE08
@@ -15,7 +15,6 @@ CONFIG_HIBERNATION=n
15CONFIG_RCU_FANOUT=3 15CONFIG_RCU_FANOUT=3
16CONFIG_RCU_FANOUT_LEAF=2 16CONFIG_RCU_FANOUT_LEAF=2
17CONFIG_RCU_NOCB_CPU=y 17CONFIG_RCU_NOCB_CPU=y
18CONFIG_RCU_NOCB_CPU_ALL=y
19CONFIG_DEBUG_LOCK_ALLOC=n 18CONFIG_DEBUG_LOCK_ALLOC=n
20CONFIG_PROVE_LOCKING=n 19CONFIG_PROVE_LOCKING=n
21CONFIG_RCU_BOOST=n 20CONFIG_RCU_BOOST=n
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot b/tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot
index fb066dc82769..1bd8efc4141e 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot
@@ -2,3 +2,4 @@ rcutorture.torture_type=sched
2rcupdate.rcu_self_test=1 2rcupdate.rcu_self_test=1
3rcupdate.rcu_self_test_sched=1 3rcupdate.rcu_self_test_sched=1
4rcutree.rcu_fanout_exact=1 4rcutree.rcu_fanout_exact=1
5rcu_nocbs=0-7
diff --git a/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt b/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt
index 928fadaecc25..9ad3f89c8dc7 100644
--- a/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt
+++ b/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt
@@ -16,11 +16,9 @@ CONFIG_PROVE_RCU -- Hardwired to CONFIG_PROVE_LOCKING.
16CONFIG_RCU_BOOST -- one of PREEMPT_RCU. 16CONFIG_RCU_BOOST -- one of PREEMPT_RCU.
17CONFIG_RCU_FANOUT -- Cover hierarchy, but overlap with others. 17CONFIG_RCU_FANOUT -- Cover hierarchy, but overlap with others.
18CONFIG_RCU_FANOUT_LEAF -- Do one non-default. 18CONFIG_RCU_FANOUT_LEAF -- Do one non-default.
19CONFIG_RCU_FAST_NO_HZ -- Do one, but not with CONFIG_RCU_NOCB_CPU_ALL. 19CONFIG_RCU_FAST_NO_HZ -- Do one, but not with all nohz_full CPUs.
20CONFIG_RCU_NOCB_CPU -- Do three, see below. 20CONFIG_RCU_NOCB_CPU -- Do three, one with no rcu_nocbs CPUs, one with
21CONFIG_RCU_NOCB_CPU_ALL -- Do one. 21 rcu_nocbs=0, and one with all rcu_nocbs CPUs.
22CONFIG_RCU_NOCB_CPU_NONE -- Do one.
23CONFIG_RCU_NOCB_CPU_ZERO -- Do one.
24CONFIG_RCU_TRACE -- Do half. 22CONFIG_RCU_TRACE -- Do half.
25CONFIG_SMP -- Need one !SMP for PREEMPT_RCU. 23CONFIG_SMP -- Need one !SMP for PREEMPT_RCU.
26CONFIG_RCU_EXPERT=n -- Do a few, but these have to be vanilla configurations. 24CONFIG_RCU_EXPERT=n -- Do a few, but these have to be vanilla configurations.