Commit 26845c2860cebebe6ce2d9d01ae3cb3db84b7e29
1 parent
c68de2097a
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>
Showing 2 changed files with 42 additions and 8 deletions Side-by-side Diff
kernel/rcutree.c
... | ... | @@ -1938,12 +1938,6 @@ |
1938 | 1938 | int cpu; |
1939 | 1939 | |
1940 | 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 | 1941 | RCU_INIT_FLAVOR(&rcu_sched_state, rcu_sched_data); |
1948 | 1942 | RCU_INIT_FLAVOR(&rcu_bh_state, rcu_bh_data); |
1949 | 1943 | __rcu_init_preempt(); |
kernel/rcutree_plugin.h
... | ... | @@ -26,6 +26,45 @@ |
26 | 26 | |
27 | 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 | 68 | #ifdef CONFIG_TREE_PREEMPT_RCU |
30 | 69 | |
31 | 70 | struct rcu_state rcu_preempt_state = RCU_STATE_INITIALIZER(rcu_preempt_state); |
... | ... | @@ -38,8 +77,8 @@ |
38 | 77 | */ |
39 | 78 | static void __init rcu_bootup_announce(void) |
40 | 79 | { |
41 | - printk(KERN_INFO | |
42 | - "Experimental preemptable hierarchical RCU implementation.\n"); | |
80 | + printk(KERN_INFO "Preemptable hierarchical RCU implementation.\n"); | |
81 | + rcu_bootup_announce_oddness(); | |
43 | 82 | } |
44 | 83 | |
45 | 84 | /* |
... | ... | @@ -757,6 +796,7 @@ |
757 | 796 | static void __init rcu_bootup_announce(void) |
758 | 797 | { |
759 | 798 | printk(KERN_INFO "Hierarchical RCU implementation.\n"); |
799 | + rcu_bootup_announce_oddness(); | |
760 | 800 | } |
761 | 801 | |
762 | 802 | /* |