diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2011-08-03 06:34:24 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2011-09-29 00:38:36 -0400 |
commit | 4627e240dfee4a0a46a58010b1b721b4ded1918f (patch) | |
tree | 807cc0618bc843800aa85fd6d20b4e9ee7adb74b /kernel/rcutree.c | |
parent | 6206ab9bab620fc0fbbed30ce20d145b0b3d1840 (diff) |
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) | |||
583 | } | 583 | } |
584 | printk("} (detected by %d, t=%ld jiffies)\n", | 584 | printk("} (detected by %d, t=%ld jiffies)\n", |
585 | smp_processor_id(), (long)(jiffies - rsp->gp_start)); | 585 | smp_processor_id(), (long)(jiffies - rsp->gp_start)); |
586 | trigger_all_cpu_backtrace(); | 586 | if (!trigger_all_cpu_backtrace()) |
587 | dump_stack(); | ||
587 | 588 | ||
588 | /* If so configured, complain about tasks blocking the grace period. */ | 589 | /* If so configured, complain about tasks blocking the grace period. */ |
589 | 590 | ||
@@ -604,7 +605,8 @@ static void print_cpu_stall(struct rcu_state *rsp) | |||
604 | */ | 605 | */ |
605 | printk(KERN_ERR "INFO: %s detected stall on CPU %d (t=%lu jiffies)\n", | 606 | printk(KERN_ERR "INFO: %s detected stall on CPU %d (t=%lu jiffies)\n", |
606 | rsp->name, smp_processor_id(), jiffies - rsp->gp_start); | 607 | rsp->name, smp_processor_id(), jiffies - rsp->gp_start); |
607 | trigger_all_cpu_backtrace(); | 608 | if (!trigger_all_cpu_backtrace()) |
609 | dump_stack(); | ||
608 | 610 | ||
609 | raw_spin_lock_irqsave(&rnp->lock, flags); | 611 | raw_spin_lock_irqsave(&rnp->lock, flags); |
610 | if (ULONG_CMP_GE(jiffies, rsp->jiffies_stall)) | 612 | if (ULONG_CMP_GE(jiffies, rsp->jiffies_stall)) |