forked from mirrors/linux
		
	rcu: Remove conditional compilation for RCU CPU stall warnings
The RCU CPU stall warnings can now be controlled using the rcu_cpu_stall_suppress boot-time parameter or via the same parameter from sysfs. There is therefore no longer any reason to have kernel config parameters for this feature. This commit therefore removes the RCU_CPU_STALL_DETECTOR and RCU_CPU_STALL_DETECTOR_RUNNABLE kernel config parameters. The RCU_CPU_STALL_TIMEOUT parameter remains to allow the timeout to be tuned and the RCU_CPU_STALL_VERBOSE parameter remains to allow task-stall information to be suppressed if desired. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
		
							parent
							
								
									0ee5623f9a
								
							
						
					
					
						commit
						a00e0d714f
					
				
					 6 changed files with 17 additions and 88 deletions
				
			
		| 
						 | 
				
			
			@ -21,7 +21,7 @@ rcu.txt
 | 
			
		|||
RTFP.txt
 | 
			
		||||
	- List of RCU papers (bibliography) going back to 1980.
 | 
			
		||||
stallwarn.txt
 | 
			
		||||
	- RCU CPU stall warnings (CONFIG_RCU_CPU_STALL_DETECTOR)
 | 
			
		||||
	- RCU CPU stall warnings (module parameter rcu_cpu_stall_suppress)
 | 
			
		||||
torture.txt
 | 
			
		||||
	- RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST)
 | 
			
		||||
trace.txt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,25 @@
 | 
			
		|||
Using RCU's CPU Stall Detector
 | 
			
		||||
 | 
			
		||||
The CONFIG_RCU_CPU_STALL_DETECTOR kernel config parameter enables
 | 
			
		||||
RCU's CPU stall detector, which detects conditions that unduly delay
 | 
			
		||||
RCU grace periods.  The stall detector's idea of what constitutes
 | 
			
		||||
"unduly delayed" is controlled by a set of C preprocessor macros:
 | 
			
		||||
The rcu_cpu_stall_suppress module parameter enables RCU's CPU stall
 | 
			
		||||
detector, which detects conditions that unduly delay RCU grace periods.
 | 
			
		||||
This module parameter enables CPU stall detection by default, but
 | 
			
		||||
may be overridden via boot-time parameter or at runtime via sysfs.
 | 
			
		||||
The stall detector's idea of what constitutes "unduly delayed" is
 | 
			
		||||
controlled by a set of kernel configuration variables and cpp macros:
 | 
			
		||||
 | 
			
		||||
RCU_SECONDS_TILL_STALL_CHECK
 | 
			
		||||
CONFIG_RCU_CPU_STALL_TIMEOUT
 | 
			
		||||
 | 
			
		||||
	This macro defines the period of time that RCU will wait from
 | 
			
		||||
	the beginning of a grace period until it issues an RCU CPU
 | 
			
		||||
	stall warning.	This time period is normally ten seconds.
 | 
			
		||||
	This kernel configuration parameter defines the period of time
 | 
			
		||||
	that RCU will wait from the beginning of a grace period until it
 | 
			
		||||
	issues an RCU CPU stall warning.  This time period is normally
 | 
			
		||||
	ten seconds.
 | 
			
		||||
 | 
			
		||||
RCU_SECONDS_TILL_STALL_RECHECK
 | 
			
		||||
 | 
			
		||||
	This macro defines the period of time that RCU will wait after
 | 
			
		||||
	issuing a stall warning until it issues another stall warning
 | 
			
		||||
	for the same stall.  This time period is normally set to thirty
 | 
			
		||||
	seconds.
 | 
			
		||||
	for the same stall.  This time period is normally set to three
 | 
			
		||||
	times the check interval plus thirty seconds.
 | 
			
		||||
 | 
			
		||||
RCU_STALL_RAT_DELAY
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,10 +140,8 @@ module_param(blimit, int, 0);
 | 
			
		|||
module_param(qhimark, int, 0);
 | 
			
		||||
module_param(qlowmark, int, 0);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
 | 
			
		||||
int rcu_cpu_stall_suppress __read_mostly = RCU_CPU_STALL_SUPPRESS_INIT;
 | 
			
		||||
int rcu_cpu_stall_suppress __read_mostly;
 | 
			
		||||
module_param(rcu_cpu_stall_suppress, int, 0644);
 | 
			
		||||
#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
 | 
			
		||||
static void force_quiescent_state(struct rcu_state *rsp, int relaxed);
 | 
			
		||||
static int rcu_pending(int cpu);
 | 
			
		||||
| 
						 | 
				
			
			@ -450,8 +448,6 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)
 | 
			
		|||
 | 
			
		||||
#endif /* #else #ifdef CONFIG_NO_HZ */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
 | 
			
		||||
 | 
			
		||||
int rcu_cpu_stall_suppress __read_mostly;
 | 
			
		||||
 | 
			
		||||
static void record_gp_stall_check_time(struct rcu_state *rsp)
 | 
			
		||||
| 
						 | 
				
			
			@ -587,26 +583,6 @@ static void __init check_cpu_stall_init(void)
 | 
			
		|||
	atomic_notifier_chain_register(&panic_notifier_list, &rcu_panic_block);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
 | 
			
		||||
static void record_gp_stall_check_time(struct rcu_state *rsp)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void rcu_cpu_stall_reset(void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __init check_cpu_stall_init(void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* #else #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Update CPU-local rcu_data state to record the newly noticed grace period.
 | 
			
		||||
 * This is used both when we started the grace period and when we notice
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -254,7 +254,6 @@ struct rcu_data {
 | 
			
		|||
#endif /* #else #ifdef CONFIG_NO_HZ */
 | 
			
		||||
 | 
			
		||||
#define RCU_JIFFIES_TILL_FORCE_QS	 3	/* for rsp->jiffies_force_qs */
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PROVE_RCU
 | 
			
		||||
#define RCU_STALL_DELAY_DELTA	       (5 * HZ)
 | 
			
		||||
| 
						 | 
				
			
			@ -272,13 +271,6 @@ struct rcu_data {
 | 
			
		|||
						/*  scheduling clock irq */
 | 
			
		||||
						/*  before ratting on them. */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR_RUNNABLE
 | 
			
		||||
#define RCU_CPU_STALL_SUPPRESS_INIT 0
 | 
			
		||||
#else
 | 
			
		||||
#define RCU_CPU_STALL_SUPPRESS_INIT 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * RCU global state, including node hierarchy.  This hierarchy is
 | 
			
		||||
| 
						 | 
				
			
			@ -325,12 +317,10 @@ struct rcu_state {
 | 
			
		|||
						/*  due to lock unavailable. */
 | 
			
		||||
	unsigned long n_force_qs_ngp;		/* Number of calls leaving */
 | 
			
		||||
						/*  due to no GP active. */
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
 | 
			
		||||
	unsigned long gp_start;			/* Time at which GP started, */
 | 
			
		||||
						/*  but in jiffies. */
 | 
			
		||||
	unsigned long jiffies_stall;		/* Time at which to check */
 | 
			
		||||
						/*  for CPU stalls. */
 | 
			
		||||
#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
	char *name;				/* Name of structure. */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -366,11 +356,9 @@ static int rcu_preempted_readers(struct rcu_node *rnp);
 | 
			
		|||
static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp,
 | 
			
		||||
				      unsigned long flags);
 | 
			
		||||
#endif /* #ifdef CONFIG_HOTPLUG_CPU */
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
 | 
			
		||||
static void rcu_print_detail_task_stall(struct rcu_state *rsp);
 | 
			
		||||
static void rcu_print_task_stall(struct rcu_node *rnp);
 | 
			
		||||
static void rcu_preempt_stall_reset(void);
 | 
			
		||||
#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp);
 | 
			
		||||
#ifdef CONFIG_HOTPLUG_CPU
 | 
			
		||||
static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,10 +54,6 @@ static void __init rcu_bootup_announce_oddness(void)
 | 
			
		|||
#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
 | 
			
		||||
#if defined(CONFIG_TREE_PREEMPT_RCU) && !defined(CONFIG_RCU_CPU_STALL_VERBOSE)
 | 
			
		||||
	printk(KERN_INFO "\tVerbose stalled-CPUs detection is disabled.\n");
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -356,8 +352,6 @@ void __rcu_read_unlock(void)
 | 
			
		|||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(__rcu_read_unlock);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_VERBOSE
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -430,8 +424,6 @@ static void rcu_preempt_stall_reset(void)
 | 
			
		|||
	rcu_preempt_state.jiffies_stall = jiffies + ULONG_MAX / 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Check that the list of blocked tasks for the newly completed grace
 | 
			
		||||
 * period is in fact empty.  It is a serious bug to complete a grace
 | 
			
		||||
| 
						 | 
				
			
			@ -862,8 +854,6 @@ static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp, unsigned long flags)
 | 
			
		|||
 | 
			
		||||
#endif /* #ifdef CONFIG_HOTPLUG_CPU */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Because preemptable RCU does not exist, we never have to check for
 | 
			
		||||
 * tasks blocked within RCU read-side critical sections.
 | 
			
		||||
| 
						 | 
				
			
			@ -888,8 +878,6 @@ static void rcu_preempt_stall_reset(void)
 | 
			
		|||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Because there is no preemptable RCU, there can be no readers blocked,
 | 
			
		||||
 * so there is no need to check for blocked tasks.  So check only for
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -875,22 +875,9 @@ config RCU_TORTURE_TEST_RUNNABLE
 | 
			
		|||
	  Say N here if you want the RCU torture tests to start only
 | 
			
		||||
	  after being manually enabled via /proc.
 | 
			
		||||
 | 
			
		||||
config RCU_CPU_STALL_DETECTOR
 | 
			
		||||
	bool "Check for stalled CPUs delaying RCU grace periods"
 | 
			
		||||
	depends on TREE_RCU || TREE_PREEMPT_RCU
 | 
			
		||||
	default y
 | 
			
		||||
	help
 | 
			
		||||
	  This option causes RCU to printk information on which
 | 
			
		||||
	  CPUs are delaying the current grace period, but only when
 | 
			
		||||
	  the grace period extends for excessive time periods.
 | 
			
		||||
 | 
			
		||||
	  Say N if you want to disable such checks.
 | 
			
		||||
 | 
			
		||||
	  Say Y if you are unsure.
 | 
			
		||||
 | 
			
		||||
config RCU_CPU_STALL_TIMEOUT
 | 
			
		||||
	int "RCU CPU stall timeout in seconds"
 | 
			
		||||
	depends on RCU_CPU_STALL_DETECTOR
 | 
			
		||||
	depends on TREE_RCU || TREE_PREEMPT_RCU
 | 
			
		||||
	range 3 300
 | 
			
		||||
	default 60
 | 
			
		||||
	help
 | 
			
		||||
| 
						 | 
				
			
			@ -899,22 +886,9 @@ config RCU_CPU_STALL_TIMEOUT
 | 
			
		|||
	  RCU grace period persists, additional CPU stall warnings are
 | 
			
		||||
	  printed at more widely spaced intervals.
 | 
			
		||||
 | 
			
		||||
config RCU_CPU_STALL_DETECTOR_RUNNABLE
 | 
			
		||||
	bool "RCU CPU stall checking starts automatically at boot"
 | 
			
		||||
	depends on RCU_CPU_STALL_DETECTOR
 | 
			
		||||
	default y
 | 
			
		||||
	help
 | 
			
		||||
	  If set, start checking for RCU CPU stalls immediately on
 | 
			
		||||
	  boot.  Otherwise, RCU CPU stall checking must be manually
 | 
			
		||||
	  enabled.
 | 
			
		||||
 | 
			
		||||
	  Say Y if you are unsure.
 | 
			
		||||
 | 
			
		||||
	  Say N if you wish to suppress RCU CPU stall checking during boot.
 | 
			
		||||
 | 
			
		||||
config RCU_CPU_STALL_VERBOSE
 | 
			
		||||
	bool "Print additional per-task information for RCU_CPU_STALL_DETECTOR"
 | 
			
		||||
	depends on RCU_CPU_STALL_DETECTOR && TREE_PREEMPT_RCU
 | 
			
		||||
	depends on TREE_PREEMPT_RCU
 | 
			
		||||
	default y
 | 
			
		||||
	help
 | 
			
		||||
	  This option causes RCU to printk detailed per-task information
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue