diff options
author | Paul E. McKenney <paul.mckenney@linaro.org> | 2011-04-22 21:08:51 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2011-05-06 02:16:57 -0400 |
commit | 5ece5bab3ed8594ce2c85c6c6e6b82109db36ca7 (patch) | |
tree | c9ef8faa5dbb9e7c82893657e5aa2c1040987f96 /kernel/rcutree.c | |
parent | 15ba0ba860871cf74b48b1bb47c26c91a66126f3 (diff) |
rcu: Add forward-progress diagnostic for per-CPU kthreads
Increment a per-CPU counter on each pass through rcu_cpu_kthread()'s
service loop, and add it to the rcudata trace output.
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r-- | kernel/rcutree.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 27b6d8de82f6..575d6414763e 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -93,6 +93,7 @@ EXPORT_SYMBOL_GPL(rcu_scheduler_active); | |||
93 | static DEFINE_PER_CPU(struct task_struct *, rcu_cpu_kthread_task); | 93 | static DEFINE_PER_CPU(struct task_struct *, rcu_cpu_kthread_task); |
94 | DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_status); | 94 | DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_status); |
95 | DEFINE_PER_CPU(int, rcu_cpu_kthread_cpu); | 95 | DEFINE_PER_CPU(int, rcu_cpu_kthread_cpu); |
96 | DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_loops); | ||
96 | static DEFINE_PER_CPU(wait_queue_head_t, rcu_cpu_wq); | 97 | static DEFINE_PER_CPU(wait_queue_head_t, rcu_cpu_wq); |
97 | DEFINE_PER_CPU(char, rcu_cpu_has_work); | 98 | DEFINE_PER_CPU(char, rcu_cpu_has_work); |
98 | static char rcu_kthreads_spawnable; | 99 | static char rcu_kthreads_spawnable; |
@@ -1625,6 +1626,7 @@ static int rcu_cpu_kthread(void *arg) | |||
1625 | break; | 1626 | break; |
1626 | } | 1627 | } |
1627 | *statusp = RCU_KTHREAD_RUNNING; | 1628 | *statusp = RCU_KTHREAD_RUNNING; |
1629 | per_cpu(rcu_cpu_kthread_loops, cpu)++; | ||
1628 | local_irq_save(flags); | 1630 | local_irq_save(flags); |
1629 | work = *workp; | 1631 | work = *workp; |
1630 | *workp = 0; | 1632 | *workp = 0; |