aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/RCU/stallwarn.txt16
-rw-r--r--kernel/rcutree_plugin.h12
2 files changed, 16 insertions, 12 deletions
diff --git a/Documentation/RCU/stallwarn.txt b/Documentation/RCU/stallwarn.txt
index 523364e4e1f1..1927151b386b 100644
--- a/Documentation/RCU/stallwarn.txt
+++ b/Documentation/RCU/stallwarn.txt
@@ -99,7 +99,7 @@ In kernels with CONFIG_RCU_FAST_NO_HZ, even more information is
99printed: 99printed:
100 100
101 INFO: rcu_preempt detected stall on CPU 101 INFO: rcu_preempt detected stall on CPU
102 0: (64628 ticks this GP) idle=dd5/3fffffffffffffff/0 drain=0 . timer=-1 102 0: (64628 ticks this GP) idle=dd5/3fffffffffffffff/0 drain=0 . timer not pending
103 (t=65000 jiffies) 103 (t=65000 jiffies)
104 104
105The "(64628 ticks this GP)" indicates that this CPU has taken more 105The "(64628 ticks this GP)" indicates that this CPU has taken more
@@ -116,13 +116,13 @@ number between the two "/"s is the value of the nesting, which will
116be a small positive number if in the idle loop and a very large positive 116be a small positive number if in the idle loop and a very large positive
117number (as shown above) otherwise. 117number (as shown above) otherwise.
118 118
119For CONFIG_RCU_FAST_NO_HZ kernels, the "drain=0" indicates that the 119For CONFIG_RCU_FAST_NO_HZ kernels, the "drain=0" indicates that the CPU is
120CPU is not in the process of trying to force itself into dyntick-idle 120not in the process of trying to force itself into dyntick-idle state, the
121state, the "." indicates that the CPU has not given up forcing RCU 121"." indicates that the CPU has not given up forcing RCU into dyntick-idle
122into dyntick-idle mode (it would be "H" otherwise), and the "timer=-1" 122mode (it would be "H" otherwise), and the "timer not pending" indicates
123indicates that the CPU has not recented forced RCU into dyntick-idle 123that the CPU has not recently forced RCU into dyntick-idle mode (it
124mode (it would otherwise indicate the number of microseconds remaining 124would otherwise indicate the number of microseconds remaining in this
125in this forced state). 125forced state).
126 126
127 127
128Multiple Warnings From One Stall 128Multiple Warnings From One Stall
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index df47014e129d..e12d07ba601a 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -2130,11 +2130,15 @@ static void print_cpu_stall_fast_no_hz(char *cp, int cpu)
2130{ 2130{
2131 struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu); 2131 struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
2132 struct timer_list *tltp = &rdtp->idle_gp_timer; 2132 struct timer_list *tltp = &rdtp->idle_gp_timer;
2133 char c;
2133 2134
2134 sprintf(cp, "drain=%d %c timer=%lu", 2135 c = rdtp->dyntick_holdoff == jiffies ? 'H' : '.';
2135 rdtp->dyntick_drain, 2136 if (timer_pending(tltp))
2136 rdtp->dyntick_holdoff == jiffies ? 'H' : '.', 2137 sprintf(cp, "drain=%d %c timer=%lu",
2137 timer_pending(tltp) ? tltp->expires - jiffies : -1); 2138 rdtp->dyntick_drain, c, tltp->expires - jiffies);
2139 else
2140 sprintf(cp, "drain=%d %c timer not pending",
2141 rdtp->dyntick_drain, c);
2138} 2142}
2139 2143
2140#else /* #ifdef CONFIG_RCU_FAST_NO_HZ */ 2144#else /* #ifdef CONFIG_RCU_FAST_NO_HZ */