diff options
| author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-05-28 13:33:08 -0400 | 
|---|---|---|
| committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-07-12 18:39:22 -0400 | 
| commit | 47199a0812535217c29933cecf468568bb37f933 (patch) | |
| tree | 6392939a8b297527eb617f0ab8f54b427534ecd0 /kernel/rcu/tree.c | |
| parent | cd23ac8ddb7be993f88bee893b89a8b4971c3651 (diff) | |
rcu: Add diagnostics for rcutorture writer stall warning
This commit adds any in-the-future ->gp_seq_needed fields to the
diagnostics for an rcutorture writer stall warning message.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/tree.c')
| -rw-r--r-- | kernel/rcu/tree.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 7746fe1ee3fc..4915525559ac 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c  | |||
| @@ -606,11 +606,32 @@ EXPORT_SYMBOL_GPL(rcu_sched_force_quiescent_state); | |||
| 606 | */ | 606 | */ | 
| 607 | void show_rcu_gp_kthreads(void) | 607 | void show_rcu_gp_kthreads(void) | 
| 608 | { | 608 | { | 
| 609 | int cpu; | ||
| 610 | struct rcu_data *rdp; | ||
| 611 | struct rcu_node *rnp; | ||
| 609 | struct rcu_state *rsp; | 612 | struct rcu_state *rsp; | 
| 610 | 613 | ||
| 611 | for_each_rcu_flavor(rsp) { | 614 | for_each_rcu_flavor(rsp) { | 
| 612 | pr_info("%s: wait state: %d ->state: %#lx\n", | 615 | pr_info("%s: wait state: %d ->state: %#lx\n", | 
| 613 | rsp->name, rsp->gp_state, rsp->gp_kthread->state); | 616 | rsp->name, rsp->gp_state, rsp->gp_kthread->state); | 
| 617 | rcu_for_each_node_breadth_first(rsp, rnp) { | ||
| 618 | if (ULONG_CMP_GE(rsp->gp_seq, rnp->gp_seq_needed)) | ||
| 619 | continue; | ||
| 620 | pr_info("\trcu_node %d:%d ->gp_seq %lu ->gp_seq_needed %lu\n", | ||
| 621 | rnp->grplo, rnp->grphi, rnp->gp_seq, | ||
| 622 | rnp->gp_seq_needed); | ||
| 623 | if (!rcu_is_leaf_node(rnp)) | ||
| 624 | continue; | ||
| 625 | for_each_leaf_node_possible_cpu(rnp, cpu) { | ||
| 626 | rdp = per_cpu_ptr(rsp->rda, cpu); | ||
| 627 | if (rdp->gpwrap || | ||
| 628 | ULONG_CMP_GE(rsp->gp_seq, | ||
| 629 | rdp->gp_seq_needed)) | ||
| 630 | continue; | ||
| 631 | pr_info("\tcpu %d ->gp_seq_needed %lu\n", | ||
| 632 | cpu, rdp->gp_seq_needed); | ||
| 633 | } | ||
| 634 | } | ||
| 614 | /* sched_show_task(rsp->gp_kthread); */ | 635 | /* sched_show_task(rsp->gp_kthread); */ | 
| 615 | } | 636 | } | 
| 616 | } | 637 | } | 
