aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2008-10-02 19:06:39 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-03 04:36:08 -0400
commit2133b5d7ff531bc15a923db4a6a50bf96c561be9 (patch)
tree5917515eaec573fbc3d4a734769d6184beb83dbb /include
parentb5259d944279d0b7e78a83849a352d8ba0447c4c (diff)
rcu: RCU-based detection of stalled CPUs for Classic RCU
This patch adds stalled-CPU detection to Classic RCU. This capability is enabled by a new config variable CONFIG_RCU_CPU_STALL_DETECTOR, which defaults disabled. This is a debugging feature to detect infinite loops in kernel code, not something that non-kernel-hackers would be expected to care about. This feature can detect looping CPUs in !PREEMPT builds and looping CPUs with preemption disabled in PREEMPT builds. This is essentially a port of this functionality from the treercu patch, replacing the stall debug patch that is already in tip/core/rcu (commit 67182ae1c4). The changes from the patch in tip/core/rcu include making the config variable name match that in treercu, changing from seconds to jiffies to avoid spurious warnings, and printing a boot message when this feature is enabled. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
-rw-r--r--include/linux/rcuclassic.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h
index 29bf528c7dcc..5f89b62e6983 100644
--- a/include/linux/rcuclassic.h
+++ b/include/linux/rcuclassic.h
@@ -40,15 +40,21 @@
40#include <linux/cpumask.h> 40#include <linux/cpumask.h>
41#include <linux/seqlock.h> 41#include <linux/seqlock.h>
42 42
43#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
44#define RCU_SECONDS_TILL_STALL_CHECK ( 3 * HZ) /* for rcp->jiffies_stall */
45#define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rcp->jiffies_stall */
46#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
43 47
44/* Global control variables for rcupdate callback mechanism. */ 48/* Global control variables for rcupdate callback mechanism. */
45struct rcu_ctrlblk { 49struct rcu_ctrlblk {
46 long cur; /* Current batch number. */ 50 long cur; /* Current batch number. */
47 long completed; /* Number of the last completed batch */ 51 long completed; /* Number of the last completed batch */
48 long pending; /* Number of the last pending batch */ 52 long pending; /* Number of the last pending batch */
49#ifdef CONFIG_DEBUG_RCU_STALL 53#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
50 unsigned long gp_check; /* Time grace period should end, in seconds. */ 54 unsigned long gp_start; /* Time at which GP started in jiffies. */
51#endif /* #ifdef CONFIG_DEBUG_RCU_STALL */ 55 unsigned long jiffies_stall;
56 /* Time at which to check for CPU stalls. */
57#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
52 58
53 int signaled; 59 int signaled;
54 60