提交 53bb857c 编写于 作者: P Paul E. McKenney 提交者: Paul E. McKenney

rcu: Dump number of callbacks in stall warning messages

In theory, if a grace period manages to get started despite there being
no callbacks on any of the CPUs, all CPUs could go into dyntick-idle
mode, so that the grace period would never end.  This commit updates
the RCU CPU stall warning messages to detect this condition by summing
up the number of callbacks on all CPUs.
Signed-off-by: NPaul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
上级 eee05882
...@@ -903,6 +903,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp) ...@@ -903,6 +903,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
unsigned long flags; unsigned long flags;
int ndetected = 0; int ndetected = 0;
struct rcu_node *rnp = rcu_get_root(rsp); struct rcu_node *rnp = rcu_get_root(rsp);
long totqlen = 0;
/* Only let one CPU complain about others per time interval. */ /* Only let one CPU complain about others per time interval. */
...@@ -947,9 +948,11 @@ static void print_other_cpu_stall(struct rcu_state *rsp) ...@@ -947,9 +948,11 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
raw_spin_unlock_irqrestore(&rnp->lock, flags); raw_spin_unlock_irqrestore(&rnp->lock, flags);
print_cpu_stall_info_end(); 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), smp_processor_id(), (long)(jiffies - rsp->gp_start),
rsp->gpnum, rsp->completed); rsp->gpnum, rsp->completed, totqlen);
if (ndetected == 0) if (ndetected == 0)
printk(KERN_ERR "INFO: Stall ended before state dump start\n"); printk(KERN_ERR "INFO: Stall ended before state dump start\n");
else if (!trigger_all_cpu_backtrace()) else if (!trigger_all_cpu_backtrace())
...@@ -964,8 +967,10 @@ static void print_other_cpu_stall(struct rcu_state *rsp) ...@@ -964,8 +967,10 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
static void print_cpu_stall(struct rcu_state *rsp) static void print_cpu_stall(struct rcu_state *rsp)
{ {
int cpu;
unsigned long flags; unsigned long flags;
struct rcu_node *rnp = rcu_get_root(rsp); struct rcu_node *rnp = rcu_get_root(rsp);
long totqlen = 0;
/* /*
* OK, time to rat on ourselves... * OK, time to rat on ourselves...
...@@ -976,8 +981,10 @@ static void print_cpu_stall(struct rcu_state *rsp) ...@@ -976,8 +981,10 @@ static void print_cpu_stall(struct rcu_state *rsp)
print_cpu_stall_info_begin(); print_cpu_stall_info_begin();
print_cpu_stall_info(rsp, smp_processor_id()); print_cpu_stall_info(rsp, smp_processor_id());
print_cpu_stall_info_end(); print_cpu_stall_info_end();
pr_cont(" (t=%lu jiffies g=%lu c=%lu)\n", for_each_possible_cpu(cpu)
jiffies - rsp->gp_start, rsp->gpnum, rsp->completed); 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()) if (!trigger_all_cpu_backtrace())
dump_stack(); dump_stack();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册