This document gives a brief rationale for the TREE_RCU-related test
cases, a group that includes TREE_PREEMPT_RCU.


Kconfig Parameters:

CONFIG_DEBUG_LOCK_ALLOC -- Do three, covering CONFIG_PROVE_LOCKING & not.
CONFIG_DEBUG_OBJECTS_RCU_HEAD -- Do one.
CONFIG_HOTPLUG_CPU -- Do half.  (Every second.)
CONFIG_HZ_PERIODIC -- Do one.
CONFIG_NO_HZ_IDLE -- Do those not otherwise specified. (Groups of two.)
CONFIG_NO_HZ_FULL -- Do two, one with CONFIG_NO_HZ_FULL_SYSIDLE.
CONFIG_NO_HZ_FULL_SYSIDLE -- Do one.
CONFIG_PREEMPT -- Do half.  (First three and #8.)
CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not.
CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING.
CONFIG_PROVE_RCU_DELAY -- Do one.
CONFIG_RCU_BOOST -- one of TREE_PREEMPT_RCU.
CONFIG_RCU_BOOST_PRIO -- set to 2 for _BOOST testing.
CONFIG_RCU_CPU_STALL_INFO -- do one with and without _VERBOSE.
CONFIG_RCU_CPU_STALL_VERBOSE -- do one with and without _INFO.
CONFIG_RCU_FANOUT -- Cover hierarchy as currently, but overlap with others.
CONFIG_RCU_FANOUT_EXACT -- Do one.
CONFIG_RCU_FANOUT_LEAF -- Do one non-default.
CONFIG_RCU_FAST_NO_HZ -- Do one, but not with CONFIG_RCU_NOCB_CPU_ALL.
CONFIG_RCU_NOCB_CPU -- Do three, see below.
CONFIG_RCU_NOCB_CPU_ALL -- Do one.
CONFIG_RCU_NOCB_CPU_NONE -- Do one.
CONFIG_RCU_NOCB_CPU_ZERO -- Do one.
CONFIG_RCU_TRACE -- Do half.
CONFIG_SMP -- Need one !SMP for TREE_PREEMPT_RCU.
RCU-bh: Do one with PREEMPT and one with !PREEMPT.
RCU-sched: Do one with PREEMPT but not BOOST.


Hierarchy:

TREE01.	CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=8, CONFIG_RCU_FANOUT_EXACT=n.
TREE02.	CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=n,
	CONFIG_RCU_FANOUT_LEAF=3.
TREE03.	CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=4, CONFIG_RCU_FANOUT_EXACT=n,
	CONFIG_RCU_FANOUT_LEAF=4.
TREE04.	CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n,
	CONFIG_RCU_FANOUT_LEAF=2.
TREE05.	CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=n
	CONFIG_RCU_FANOUT_LEAF=6.
TREE06.	CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=y
	CONFIG_RCU_FANOUT_LEAF=6.
TREE07.	CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n,
	CONFIG_RCU_FANOUT_LEAF=2.
TREE08.	CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=y,
	CONFIG_RCU_FANOUT_LEAF=2.
TREE09.	CONFIG_NR_CPUS=1.


Kconfig Parameters Ignored:

CONFIG_64BIT

	Used only to check CONFIG_RCU_FANOUT value, inspection suffices.

CONFIG_NO_HZ_FULL_SYSIDLE_SMALL

	Defer until Frederic uses this.

CONFIG_PREEMPT_COUNT
CONFIG_PREEMPT_RCU

	Redundant with CONFIG_PREEMPT, ignore.

CONFIG_RCU_BOOST_DELAY

	Inspection suffices, ignore.

CONFIG_RCU_CPU_STALL_TIMEOUT

	Inspection suffices, ignore.

CONFIG_RCU_STALL_COMMON

	Implied by TREE_RCU and TREE_PREEMPT_RCU.

CONFIG_RCU_TORTURE_TEST
CONFIG_RCU_TORTURE_TEST_RUNNABLE

	Always used in KVM testing.

CONFIG_RCU_USER_QS

	Redundant with CONFIG_NO_HZ_FULL.

CONFIG_TREE_PREEMPT_RCU
CONFIG_TREE_RCU

	These are controlled by CONFIG_PREEMPT.
