Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 251c617c authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcu: Make expedited RCU-preempt stall warnings count accurately



Currently, synchronize_sched_expedited_wait() simply sets the ndetected
variable to the rcu_print_task_exp_stall() return value.  This means
that if the last rcu_node structure has no stalled tasks, record of
any stalled tasks in previous rcu_node structures is lost, which can
in turn result in failure to dump out the blocking rcu_node structures.
Or could, had the test been correct.

This commit therefore adds the return value of rcu_print_task_exp_stall()
to ndetected and corrects the later test for ndetected.

Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent 28728dd3
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3778,7 +3778,7 @@ static void synchronize_sched_expedited_wait(struct rcu_state *rsp)
		       rsp->name);
		ndetected = 0;
		rcu_for_each_leaf_node(rsp, rnp) {
			ndetected = rcu_print_task_exp_stall(rnp);
			ndetected += rcu_print_task_exp_stall(rnp);
			mask = 1;
			for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++, mask <<= 1) {
				struct rcu_data *rdp;
@@ -3797,7 +3797,7 @@ static void synchronize_sched_expedited_wait(struct rcu_state *rsp)
		pr_cont(" } %lu jiffies s: %lu root: %#lx/%c\n",
			jiffies - jiffies_start, rsp->expedited_sequence,
			rnp_root->expmask, ".T"[!!rnp_root->exp_tasks]);
		if (!ndetected) {
		if (ndetected) {
			pr_err("blocking rcu_node structures:");
			rcu_for_each_node_breadth_first(rsp, rnp) {
				if (rnp == rnp_root)