diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2011-08-03 03:34:24 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2011-09-28 21:38:36 -0700 |
commit | 4627e240dfee4a0a46a58010b1b721b4ded1918f (patch) | |
tree | 807cc0618bc843800aa85fd6d20b4e9ee7adb74b /kernel/rcutree.c | |
parent | 6206ab9bab620fc0fbbed30ce20d145b0b3d1840 (diff) | |
download | lwn-4627e240dfee4a0a46a58010b1b721b4ded1918f.tar.gz lwn-4627e240dfee4a0a46a58010b1b721b4ded1918f.zip |
rcu: Dump local stack if cannot dump all CPUs' stacks
The trigger_all_cpu_backtrace() function is a no-op in architectures that
do not define arch_trigger_all_cpu_backtrace. On such architectures, RCU
CPU stall warning messages contain no stack trace information, which makes
debugging quite difficult. This commit therefore substitutes dump_stack()
for architectures that do not define arch_trigger_all_cpu_backtrace,
so that at least the local CPU's stack is dumped as part of the RCU CPU
stall warning message.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r-- | kernel/rcutree.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index ebd18e56947b..a07bf553e02a 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c @@ -583,7 +583,8 @@ static void print_other_cpu_stall(struct rcu_state *rsp) } printk("} (detected by %d, t=%ld jiffies)\n", smp_processor_id(), (long)(jiffies - rsp->gp_start)); - trigger_all_cpu_backtrace(); + if (!trigger_all_cpu_backtrace()) + dump_stack(); /* If so configured, complain about tasks blocking the grace period. */ @@ -604,7 +605,8 @@ static void print_cpu_stall(struct rcu_state *rsp) */ printk(KERN_ERR "INFO: %s detected stall on CPU %d (t=%lu jiffies)\n", rsp->name, smp_processor_id(), jiffies - rsp->gp_start); - trigger_all_cpu_backtrace(); + if (!trigger_all_cpu_backtrace()) + dump_stack(); raw_spin_lock_irqsave(&rnp->lock, flags); if (ULONG_CMP_GE(jiffies, rsp->jiffies_stall)) |