rcu: Detect stalls caused by failure to propagate up rcu_node tree
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 22 Jan 2015 22:32:06 +0000 (14:32 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 11 Mar 2015 20:22:38 +0000 (13:22 -0700)
If all CPUs have passed through quiescent states, then stalls might be
due to starvation of the grace-period kthread or to failure to propagate
the quiescent states up the rcu_node combining tree.  The current stall
warning messages do not differentiate, so this commit adds a printout
of the root rcu_node structure's ->qsmask field.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcu/tree.c

index 98da632d1d49cf0eee0146fdbbb9b077a2fc1523..3b7e4133ca9988a22d4870f2bf83122b97a5504a 100644 (file)
@@ -1196,9 +1196,10 @@ static void print_other_cpu_stall(struct rcu_state *rsp, unsigned long gpnum)
                } else {
                        j = jiffies;
                        gpa = ACCESS_ONCE(rsp->gp_activity);
-                       pr_err("All QSes seen, last %s kthread activity %ld (%ld-%ld), jiffies_till_next_fqs=%ld\n",
+                       pr_err("All QSes seen, last %s kthread activity %ld (%ld-%ld), jiffies_till_next_fqs=%ld, root ->qsmask %#lx\n",
                               rsp->name, j - gpa, j, gpa,
-                              jiffies_till_next_fqs);
+                              jiffies_till_next_fqs,
+                              rcu_get_root(rsp)->qsmask);
                        /* In this case, the current CPU might be at fault. */
                        sched_show_task(current);
                }