"Tree RCU": scalable classic RCU implementation
[platform/adaptation/renesas_rcar/renesas_kernel.git] / kernel / Kconfig.preempt
index 9fdba03..463f297 100644 (file)
@@ -52,10 +52,29 @@ config PREEMPT
 
 endchoice
 
+choice
+       prompt "RCU Implementation"
+       default CLASSIC_RCU
+
+config CLASSIC_RCU
+       bool "Classic RCU"
+       help
+         This option selects the classic RCU implementation that is
+         designed for best read-side performance on non-realtime
+         systems.
+         
+         Select this option if you are unsure.
+
+config TREE_RCU
+       bool "Tree-based hierarchical RCU"
+       help
+         This option selects the RCU implementation that is
+         designed for very large SMP system with hundreds or
+         thousands of CPUs.
+
 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
@@ -64,16 +83,47 @@ config PREEMPT_RCU
          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
 
 config RCU_TRACE
-       bool "Enable tracing for RCU - currently stats in debugfs"
-       depends on PREEMPT_RCU
-       select DEBUG_FS
-       default y
+       bool "Enable tracing for RCU"
+       depends on TREE_RCU || PREEMPT_RCU
        help
          This option provides tracing in RCU which presents stats
          in debugfs for debugging RCU implementation.
 
          Say Y here if you want to enable RCU tracing
          Say N if you are unsure.
+
+config RCU_FANOUT
+       int "Tree-based hierarchical RCU fanout value"
+       range 2 64 if 64BIT
+       range 2 32 if !64BIT
+       depends on TREE_RCU
+       default 64 if 64BIT
+       default 32 if !64BIT
+       help
+         This option controls the fanout of hierarchical implementations
+         of RCU, allowing RCU to work efficiently on machines with
+         large numbers of CPUs.  This value must be at least the cube
+         root of NR_CPUS, which allows NR_CPUS up to 32,768 for 32-bit
+         systems and up to 262,144 for 64-bit systems.
+
+         Select a specific number if testing RCU itself.
+         Take the default if unsure.
+
+config RCU_FANOUT_EXACT
+       bool "Disable tree-based hierarchical RCU auto-balancing"
+       depends on TREE_RCU
+       default n
+       help
+         This option forces use of the exact RCU_FANOUT value specified,
+         regardless of imbalances in the hierarchy.  This is useful for
+         testing RCU itself, and might one day be useful on systems with
+         strong NUMA behavior.
+
+         Without RCU_FANOUT_EXACT, the code will balance the hierarchy.
+
+         Say n if unsure.
+
+