diff options
author | Paul E. McKenney <paul.mckenney@linaro.org> | 2012-01-16 16:29:10 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-02-21 12:03:49 -0500 |
commit | a858af2875fb291d0f4b0a4419fefbf03c2379c0 (patch) | |
tree | 5183796cbf50ec0cd3bd5c741db15705376dacbd /kernel/rcutree.h | |
parent | 13cfcca0e4e2d4cee1d0183c049eb34e54ac976e (diff) |
rcu: Print scheduling-clock information on RCU CPU stall-warning messages
There have been situations where RCU CPU stall warnings were caused by
issues in scheduling-clock timer initialization. To make it easier to
track these down, this commit causes the RCU CPU stall-warning messages
to print out the number of scheduling-clock interrupts taken in the
current grace period for each stalled CPU.
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.h')
-rw-r--r-- | kernel/rcutree.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/rcutree.h b/kernel/rcutree.h index 0328a537846a..e2ac8ee415bb 100644 --- a/kernel/rcutree.h +++ b/kernel/rcutree.h | |||
@@ -239,6 +239,12 @@ struct rcu_data { | |||
239 | bool preemptible; /* Preemptible RCU? */ | 239 | bool preemptible; /* Preemptible RCU? */ |
240 | struct rcu_node *mynode; /* This CPU's leaf of hierarchy */ | 240 | struct rcu_node *mynode; /* This CPU's leaf of hierarchy */ |
241 | unsigned long grpmask; /* Mask to apply to leaf qsmask. */ | 241 | unsigned long grpmask; /* Mask to apply to leaf qsmask. */ |
242 | #ifdef CONFIG_RCU_CPU_STALL_INFO | ||
243 | unsigned long ticks_this_gp; /* The number of scheduling-clock */ | ||
244 | /* ticks this CPU has handled */ | ||
245 | /* during and after the last grace */ | ||
246 | /* period it is aware of. */ | ||
247 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_INFO */ | ||
242 | 248 | ||
243 | /* 2) batch handling */ | 249 | /* 2) batch handling */ |
244 | /* | 250 | /* |
@@ -466,5 +472,10 @@ static void __cpuinit rcu_prepare_kthreads(int cpu); | |||
466 | static void rcu_prepare_for_idle_init(int cpu); | 472 | static void rcu_prepare_for_idle_init(int cpu); |
467 | static void rcu_cleanup_after_idle(int cpu); | 473 | static void rcu_cleanup_after_idle(int cpu); |
468 | static void rcu_prepare_for_idle(int cpu); | 474 | static void rcu_prepare_for_idle(int cpu); |
475 | static void print_cpu_stall_info_begin(void); | ||
476 | static void print_cpu_stall_info(struct rcu_state *rsp, int cpu); | ||
477 | static void print_cpu_stall_info_end(void); | ||
478 | static void zero_cpu_stall_ticks(struct rcu_data *rdp); | ||
479 | static void increment_cpu_stall_ticks(void); | ||
469 | 480 | ||
470 | #endif /* #ifndef RCU_TREE_NONCORE */ | 481 | #endif /* #ifndef RCU_TREE_NONCORE */ |