|
@@ -26,6 +26,45 @@
|
|
|
|
|
|
#include <linux/delay.h>
|
|
|
|
|
|
+/*
|
|
|
+ * Check the RCU kernel configuration parameters and print informative
|
|
|
+ * messages about anything out of the ordinary. If you like #ifdef, you
|
|
|
+ * will love this function.
|
|
|
+ */
|
|
|
+static void __init rcu_bootup_announce_oddness(void)
|
|
|
+{
|
|
|
+#ifdef CONFIG_RCU_TRACE
|
|
|
+ printk(KERN_INFO "\tRCU debugfs-based tracing is enabled.\n");
|
|
|
+#endif
|
|
|
+#if (defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 64) || (!defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 32)
|
|
|
+ printk(KERN_INFO "\tCONFIG_RCU_FANOUT set to non-default value of %d\n",
|
|
|
+ CONFIG_RCU_FANOUT);
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_RCU_FANOUT_EXACT
|
|
|
+ printk(KERN_INFO "\tHierarchical RCU autobalancing is disabled.\n");
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_RCU_FAST_NO_HZ
|
|
|
+ printk(KERN_INFO
|
|
|
+ "\tRCU dyntick-idle grace-period acceleration is enabled.\n");
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_PROVE_RCU
|
|
|
+ printk(KERN_INFO "\tRCU lockdep checking is enabled.\n");
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_RCU_TORTURE_TEST_RUNNABLE
|
|
|
+ printk(KERN_INFO "\tRCU torture testing starts during boot.\n");
|
|
|
+#endif
|
|
|
+#ifndef CONFIG_RCU_CPU_STALL_DETECTOR
|
|
|
+ printk(KERN_INFO
|
|
|
+ "\tRCU-based detection of stalled CPUs is disabled.\n");
|
|
|
+#endif
|
|
|
+#ifndef CONFIG_RCU_CPU_STALL_VERBOSE
|
|
|
+ printk(KERN_INFO "\tVerbose stalled-CPUs detection is disabled.\n");
|
|
|
+#endif
|
|
|
+#if NUM_RCU_LVL_4 != 0
|
|
|
+ printk(KERN_INFO "\tExperimental four-level hierarchy is enabled.\n");
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_TREE_PREEMPT_RCU
|
|
|
|
|
|
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);
|
|
|
*/
|
|
|
static void __init rcu_bootup_announce(void)
|
|
|
{
|
|
|
- printk(KERN_INFO
|
|
|
- "Experimental preemptable hierarchical RCU implementation.\n");
|
|
|
+ printk(KERN_INFO "Preemptable hierarchical RCU implementation.\n");
|
|
|
+ rcu_bootup_announce_oddness();
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -757,6 +796,7 @@ void exit_rcu(void)
|
|
|
static void __init rcu_bootup_announce(void)
|
|
|
{
|
|
|
printk(KERN_INFO "Hierarchical RCU implementation.\n");
|
|
|
+ rcu_bootup_announce_oddness();
|
|
|
}
|
|
|
|
|
|
/*
|