aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/Kconfig86
-rw-r--r--init/main.c11
2 files changed, 94 insertions, 3 deletions
diff --git a/init/Kconfig b/init/Kconfig
index 8a63c404ef44..13627191a60d 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -936,10 +936,90 @@ source "block/Kconfig"
936config PREEMPT_NOTIFIERS 936config PREEMPT_NOTIFIERS
937 bool 937 bool
938 938
939choice
940 prompt "RCU Implementation"
941 default CLASSIC_RCU
942
939config CLASSIC_RCU 943config CLASSIC_RCU
940 def_bool !PREEMPT_RCU 944 bool "Classic RCU"
941 help 945 help
942 This option selects the classic RCU implementation that is 946 This option selects the classic RCU implementation that is
943 designed for best read-side performance on non-realtime 947 designed for best read-side performance on non-realtime
944 systems. Classic RCU is the default. Note that the 948 systems.
945 PREEMPT_RCU symbol is used to select/deselect this option. 949
950 Select this option if you are unsure.
951
952config TREE_RCU
953 bool "Tree-based hierarchical RCU"
954 help
955 This option selects the RCU implementation that is
956 designed for very large SMP system with hundreds or
957 thousands of CPUs.
958
959config PREEMPT_RCU
960 bool "Preemptible RCU"
961 depends on PREEMPT
962 help
963 This option reduces the latency of the kernel by making certain
964 RCU sections preemptible. Normally RCU code is non-preemptible, if
965 this option is selected then read-only RCU sections become
966 preemptible. This helps latency, but may expose bugs due to
967 now-naive assumptions about each RCU read-side critical section
968 remaining on a given CPU through its execution.
969
970endchoice
971
972config RCU_TRACE
973 bool "Enable tracing for RCU"
974 depends on TREE_RCU || PREEMPT_RCU
975 help
976 This option provides tracing in RCU which presents stats
977 in debugfs for debugging RCU implementation.
978
979 Say Y here if you want to enable RCU tracing
980 Say N if you are unsure.
981
982config RCU_FANOUT
983 int "Tree-based hierarchical RCU fanout value"
984 range 2 64 if 64BIT
985 range 2 32 if !64BIT
986 depends on TREE_RCU
987 default 64 if 64BIT
988 default 32 if !64BIT
989 help
990 This option controls the fanout of hierarchical implementations
991 of RCU, allowing RCU to work efficiently on machines with
992 large numbers of CPUs. This value must be at least the cube
993 root of NR_CPUS, which allows NR_CPUS up to 32,768 for 32-bit
994 systems and up to 262,144 for 64-bit systems.
995
996 Select a specific number if testing RCU itself.
997 Take the default if unsure.
998
999config RCU_FANOUT_EXACT
1000 bool "Disable tree-based hierarchical RCU auto-balancing"
1001 depends on TREE_RCU
1002 default n
1003 help
1004 This option forces use of the exact RCU_FANOUT value specified,
1005 regardless of imbalances in the hierarchy. This is useful for
1006 testing RCU itself, and might one day be useful on systems with
1007 strong NUMA behavior.
1008
1009 Without RCU_FANOUT_EXACT, the code will balance the hierarchy.
1010
1011 Say N if unsure.
1012
1013config TREE_RCU_TRACE
1014 def_bool RCU_TRACE && TREE_RCU
1015 select DEBUG_FS
1016 help
1017 This option provides tracing for the TREE_RCU implementation,
1018 permitting Makefile to trivially select kernel/rcutree_trace.c.
1019
1020config PREEMPT_RCU_TRACE
1021 def_bool RCU_TRACE && PREEMPT_RCU
1022 select DEBUG_FS
1023 help
1024 This option provides tracing for the PREEMPT_RCU implementation,
1025 permitting Makefile to trivially select kernel/rcupreempt_trace.c.
diff --git a/init/main.c b/init/main.c
index 9711586aa7c9..535b1d4bd5f4 100644
--- a/init/main.c
+++ b/init/main.c
@@ -541,6 +541,15 @@ void __init __weak thread_info_cache_init(void)
541{ 541{
542} 542}
543 543
544void __init __weak arch_early_irq_init(void)
545{
546}
547
548void __init __weak early_irq_init(void)
549{
550 arch_early_irq_init();
551}
552
544asmlinkage void __init start_kernel(void) 553asmlinkage void __init start_kernel(void)
545{ 554{
546 char * command_line; 555 char * command_line;
@@ -605,6 +614,8 @@ asmlinkage void __init start_kernel(void)
605 sort_main_extable(); 614 sort_main_extable();
606 trap_init(); 615 trap_init();
607 rcu_init(); 616 rcu_init();
617 /* init some links before init_ISA_irqs() */
618 early_irq_init();
608 init_IRQ(); 619 init_IRQ();
609 pidhash_init(); 620 pidhash_init();
610 init_timers(); 621 init_timers();