diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-04-13 17:19:23 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-05-10 14:08:34 -0400 |
commit | 26845c2860cebebe6ce2d9d01ae3cb3db84b7e29 (patch) | |
tree | 83849948ea7bffb5e87eecc17a7275e357740632 | |
parent | c68de2097a8799549a3c3bf27cbfeea24a604284 (diff) |
rcu: print boot-time console messages if RCU configs out of ordinary
Print boot-time messages if tracing is enabled, if fanout is set
to non-default values, if exact fanout is specified, if accelerated
dyntick-idle grace periods have been enabled, if RCU-lockdep is enabled,
if rcutorture has been boot-time enabled, if the CPU stall detector has
been disabled, or if four-level hierarchy has been enabled.
This is all for TREE_RCU and TREE_PREEMPT_RCU. TINY_RCU will be handled
separately, if at all.
Suggested-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-rw-r--r-- | kernel/rcutree.c | 6 | ||||
-rw-r--r-- | kernel/rcutree_plugin.h | 44 |
2 files changed, 42 insertions, 8 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 595fb83e9b7d..ec6196fcd1fa 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -1938,12 +1938,6 @@ void __init rcu_init(void) | |||
1938 | int cpu; | 1938 | int cpu; |
1939 | 1939 | ||
1940 | rcu_bootup_announce(); | 1940 | rcu_bootup_announce(); |
1941 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
1942 | printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n"); | ||
1943 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
1944 | #if NUM_RCU_LVL_4 != 0 | ||
1945 | printk(KERN_INFO "Experimental four-level hierarchy is enabled.\n"); | ||
1946 | #endif /* #if NUM_RCU_LVL_4 != 0 */ | ||
1947 | RCU_INIT_FLAVOR(&rcu_sched_state, rcu_sched_data); | 1941 | RCU_INIT_FLAVOR(&rcu_sched_state, rcu_sched_data); |
1948 | RCU_INIT_FLAVOR(&rcu_bh_state, rcu_bh_data); | 1942 | RCU_INIT_FLAVOR(&rcu_bh_state, rcu_bh_data); |
1949 | __rcu_init_preempt(); | 1943 | __rcu_init_preempt(); |
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h index f9bc83a047da..0ae2339ab04d 100644 --- a/kernel/rcutree_plugin.h +++ b/kernel/rcutree_plugin.h | |||
@@ -26,6 +26,45 @@ | |||
26 | 26 | ||
27 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
28 | 28 | ||
29 | /* | ||
30 | * Check the RCU kernel configuration parameters and print informative | ||
31 | * messages about anything out of the ordinary. If you like #ifdef, you | ||
32 | * will love this function. | ||
33 | */ | ||
34 | static void __init rcu_bootup_announce_oddness(void) | ||
35 | { | ||
36 | #ifdef CONFIG_RCU_TRACE | ||
37 | printk(KERN_INFO "\tRCU debugfs-based tracing is enabled.\n"); | ||
38 | #endif | ||
39 | #if (defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 64) || (!defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 32) | ||
40 | printk(KERN_INFO "\tCONFIG_RCU_FANOUT set to non-default value of %d\n", | ||
41 | CONFIG_RCU_FANOUT); | ||
42 | #endif | ||
43 | #ifdef CONFIG_RCU_FANOUT_EXACT | ||
44 | printk(KERN_INFO "\tHierarchical RCU autobalancing is disabled.\n"); | ||
45 | #endif | ||
46 | #ifdef CONFIG_RCU_FAST_NO_HZ | ||
47 | printk(KERN_INFO | ||
48 | "\tRCU dyntick-idle grace-period acceleration is enabled.\n"); | ||
49 | #endif | ||
50 | #ifdef CONFIG_PROVE_RCU | ||
51 | printk(KERN_INFO "\tRCU lockdep checking is enabled.\n"); | ||
52 | #endif | ||
53 | #ifdef CONFIG_RCU_TORTURE_TEST_RUNNABLE | ||
54 | printk(KERN_INFO "\tRCU torture testing starts during boot.\n"); | ||
55 | #endif | ||
56 | #ifndef CONFIG_RCU_CPU_STALL_DETECTOR | ||
57 | printk(KERN_INFO | ||
58 | "\tRCU-based detection of stalled CPUs is disabled.\n"); | ||
59 | #endif | ||
60 | #ifndef CONFIG_RCU_CPU_STALL_VERBOSE | ||
61 | printk(KERN_INFO "\tVerbose stalled-CPUs detection is disabled.\n"); | ||
62 | #endif | ||
63 | #if NUM_RCU_LVL_4 != 0 | ||
64 | printk(KERN_INFO "\tExperimental four-level hierarchy is enabled.\n"); | ||
65 | #endif | ||
66 | } | ||
67 | |||
29 | #ifdef CONFIG_TREE_PREEMPT_RCU | 68 | #ifdef CONFIG_TREE_PREEMPT_RCU |
30 | 69 | ||
31 | struct rcu_state rcu_preempt_state = RCU_STATE_INITIALIZER(rcu_preempt_state); | 70 | struct rcu_state rcu_preempt_state = RCU_STATE_INITIALIZER(rcu_preempt_state); |
@@ -38,8 +77,8 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp); | |||
38 | */ | 77 | */ |
39 | static void __init rcu_bootup_announce(void) | 78 | static void __init rcu_bootup_announce(void) |
40 | { | 79 | { |
41 | printk(KERN_INFO | 80 | printk(KERN_INFO "Preemptable hierarchical RCU implementation.\n"); |
42 | "Experimental preemptable hierarchical RCU implementation.\n"); | 81 | rcu_bootup_announce_oddness(); |
43 | } | 82 | } |
44 | 83 | ||
45 | /* | 84 | /* |
@@ -757,6 +796,7 @@ void exit_rcu(void) | |||
757 | static void __init rcu_bootup_announce(void) | 796 | static void __init rcu_bootup_announce(void) |
758 | { | 797 | { |
759 | printk(KERN_INFO "Hierarchical RCU implementation.\n"); | 798 | printk(KERN_INFO "Hierarchical RCU implementation.\n"); |
799 | rcu_bootup_announce_oddness(); | ||
760 | } | 800 | } |
761 | 801 | ||
762 | /* | 802 | /* |