|
@@ -903,6 +903,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
|
|
|
unsigned long flags;
|
|
|
int ndetected = 0;
|
|
|
struct rcu_node *rnp = rcu_get_root(rsp);
|
|
|
+ long totqlen = 0;
|
|
|
|
|
|
/* Only let one CPU complain about others per time interval. */
|
|
|
|
|
@@ -947,9 +948,11 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
|
|
|
raw_spin_unlock_irqrestore(&rnp->lock, flags);
|
|
|
|
|
|
print_cpu_stall_info_end();
|
|
|
- pr_cont("(detected by %d, t=%ld jiffies, g=%lu, c=%lu)\n",
|
|
|
+ for_each_possible_cpu(cpu)
|
|
|
+ totqlen += per_cpu_ptr(rsp->rda, cpu)->qlen;
|
|
|
+ pr_cont("(detected by %d, t=%ld jiffies, g=%lu, c=%lu, q=%lu)\n",
|
|
|
smp_processor_id(), (long)(jiffies - rsp->gp_start),
|
|
|
- rsp->gpnum, rsp->completed);
|
|
|
+ rsp->gpnum, rsp->completed, totqlen);
|
|
|
if (ndetected == 0)
|
|
|
printk(KERN_ERR "INFO: Stall ended before state dump start\n");
|
|
|
else if (!trigger_all_cpu_backtrace())
|
|
@@ -964,8 +967,10 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
|
|
|
|
|
|
static void print_cpu_stall(struct rcu_state *rsp)
|
|
|
{
|
|
|
+ int cpu;
|
|
|
unsigned long flags;
|
|
|
struct rcu_node *rnp = rcu_get_root(rsp);
|
|
|
+ long totqlen = 0;
|
|
|
|
|
|
/*
|
|
|
* OK, time to rat on ourselves...
|
|
@@ -976,8 +981,10 @@ static void print_cpu_stall(struct rcu_state *rsp)
|
|
|
print_cpu_stall_info_begin();
|
|
|
print_cpu_stall_info(rsp, smp_processor_id());
|
|
|
print_cpu_stall_info_end();
|
|
|
- pr_cont(" (t=%lu jiffies g=%lu c=%lu)\n",
|
|
|
- jiffies - rsp->gp_start, rsp->gpnum, rsp->completed);
|
|
|
+ for_each_possible_cpu(cpu)
|
|
|
+ totqlen += per_cpu_ptr(rsp->rda, cpu)->qlen;
|
|
|
+ pr_cont(" (t=%lu jiffies g=%lu c=%lu q=%lu)\n",
|
|
|
+ jiffies - rsp->gp_start, rsp->gpnum, rsp->completed, totqlen);
|
|
|
if (!trigger_all_cpu_backtrace())
|
|
|
dump_stack();
|
|
|
|