aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 9970116163ba..ade788320dd6 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -545,6 +545,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
545 int cpu; 545 int cpu;
546 long delta; 546 long delta;
547 unsigned long flags; 547 unsigned long flags;
548 int ndetected;
548 struct rcu_node *rnp = rcu_get_root(rsp); 549 struct rcu_node *rnp = rcu_get_root(rsp);
549 550
550 /* Only let one CPU complain about others per time interval. */ 551 /* Only let one CPU complain about others per time interval. */
@@ -561,7 +562,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
561 * Now rat on any tasks that got kicked up to the root rcu_node 562 * Now rat on any tasks that got kicked up to the root rcu_node
562 * due to CPU offlining. 563 * due to CPU offlining.
563 */ 564 */
564 rcu_print_task_stall(rnp); 565 ndetected = rcu_print_task_stall(rnp);
565 raw_spin_unlock_irqrestore(&rnp->lock, flags); 566 raw_spin_unlock_irqrestore(&rnp->lock, flags);
566 567
567 /* 568 /*
@@ -573,17 +574,21 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
573 rsp->name); 574 rsp->name);
574 rcu_for_each_leaf_node(rsp, rnp) { 575 rcu_for_each_leaf_node(rsp, rnp) {
575 raw_spin_lock_irqsave(&rnp->lock, flags); 576 raw_spin_lock_irqsave(&rnp->lock, flags);
576 rcu_print_task_stall(rnp); 577 ndetected += rcu_print_task_stall(rnp);
577 raw_spin_unlock_irqrestore(&rnp->lock, flags); 578 raw_spin_unlock_irqrestore(&rnp->lock, flags);
578 if (rnp->qsmask == 0) 579 if (rnp->qsmask == 0)
579 continue; 580 continue;
580 for (cpu = 0; cpu <= rnp->grphi - rnp->grplo; cpu++) 581 for (cpu = 0; cpu <= rnp->grphi - rnp->grplo; cpu++)
581 if (rnp->qsmask & (1UL << cpu)) 582 if (rnp->qsmask & (1UL << cpu)) {
582 printk(" %d", rnp->grplo + cpu); 583 printk(" %d", rnp->grplo + cpu);
584 ndetected++;
585 }
583 } 586 }
584 printk("} (detected by %d, t=%ld jiffies)\n", 587 printk("} (detected by %d, t=%ld jiffies)\n",
585 smp_processor_id(), (long)(jiffies - rsp->gp_start)); 588 smp_processor_id(), (long)(jiffies - rsp->gp_start));
586 if (!trigger_all_cpu_backtrace()) 589 if (ndetected == 0)
590 printk(KERN_ERR "INFO: Stall ended before state dump start\n");
591 else if (!trigger_all_cpu_backtrace())
587 dump_stack(); 592 dump_stack();
588 593
589 /* If so configured, complain about tasks blocking the grace period. */ 594 /* If so configured, complain about tasks blocking the grace period. */