diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-12-11 13:20:59 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-01-06 14:05:27 -0500 |
commit | 6ccd2ecd422644277b7d8b37222e3af3f43ea9ae (patch) | |
tree | 7aabe254edd3dc05e992d631123a3275ef4dd1f6 /kernel/rcu/tree.h | |
parent | fc908ed33e7c1428f799abb12399f906da03b397 (diff) |
rcu: Improve diagnostics for spurious RCU CPU stall warnings
The current RCU CPU stall warning code will print "Stall ended before
state dump start" any time that the stall-warning code is triggered on
a CPU that has already reported a quiescent state for the current grace
period and if all quiescent states have been reported for the current
grace period. However, a true stall can result in these symptoms, for
example, by preventing RCU's grace-period kthreads from ever running
This commit therefore checks for this condition, reporting the end of
the stall only if one of the grace-period counters has actually advanced.
Otherwise, it reports the last time that the grace-period kthread made
meaningful progress. (In normal situations, the grace-period kthread
should make meaningful progress at least every jiffies_till_next_fqs
jiffies.)
Reported-by: Miroslav Benes <mbenes@suse.cz>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Miroslav Benes <mbenes@suse.cz>
Diffstat (limited to 'kernel/rcu/tree.h')
-rw-r--r-- | kernel/rcu/tree.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index e300848cc0cf..5ec81cf938fd 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h | |||
@@ -488,6 +488,8 @@ struct rcu_state { | |||
488 | /* due to no GP active. */ | 488 | /* due to no GP active. */ |
489 | unsigned long gp_start; /* Time at which GP started, */ | 489 | unsigned long gp_start; /* Time at which GP started, */ |
490 | /* but in jiffies. */ | 490 | /* but in jiffies. */ |
491 | unsigned long gp_activity; /* Time of last GP kthread */ | ||
492 | /* activity in jiffies. */ | ||
491 | unsigned long jiffies_stall; /* Time at which to check */ | 493 | unsigned long jiffies_stall; /* Time at which to check */ |
492 | /* for CPU stalls. */ | 494 | /* for CPU stalls. */ |
493 | unsigned long jiffies_resched; /* Time at which to resched */ | 495 | unsigned long jiffies_resched; /* Time at which to resched */ |