> From: Zqiang <qiang1.zhang@xxxxxxxxx> > Sent: Tuesday, February 21, 2023 12:32 PM > To: paulmck@xxxxxxxxxx; frederic@xxxxxxxxxx; joel@xxxxxxxxxxxxxxxxx > Cc: rcu@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx > Subject: [PATCH] rcu-tasks: Allow RCU-Task trace stall warning dump late IPI > CPU stacks > > The task structure's->trc_ipi_to_cpu and percpu trc_ipi_to_cpu is used to > record whether the IPI is completed, if the percpu trc_ipi_to_cpu is true and > task structure's->trc_ipi_to_cpu is non-negative value, indicates that IPI is not > completed, if the IPI is unresponsive for along time for some reason, there > will be a possibility of causing RCU-Tasks trace stall. this commit therefore > allow dump late IPI CPU stacks to show the path that current CPU is executing. > > Signed-off-by: Zqiang <qiang1.zhang@xxxxxxxxx> > --- > In the real world, the IPI delay will be very small, so the probability of > triggering dump_cpu_stack() may be very low, so if I makes noise, please > ignore it. > > kernel/rcu/tasks.h | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h index > baf7ec178155..85237fc1d0f0 100644 > --- a/kernel/rcu/tasks.h > +++ b/kernel/rcu/tasks.h > @@ -1658,8 +1658,13 @@ static void show_stalled_ipi_trace(void) > int cpu; > > for_each_possible_cpu(cpu) > - if (per_cpu(trc_ipi_to_cpu, cpu)) > + if (per_cpu(trc_ipi_to_cpu, cpu)) { > pr_alert("\tIPI outstanding to CPU %d\n", cpu); > + if (cpu_is_offline(cpu)) > + pr_alert("offline CPU %d blocking gp\n", cpu); > + else > + dump_cpu_task(cpu); check_all_holdout_tasks_trace() -> show_stalled_task_trace() has already showed the states/traces of tasks stalling the current RCU tasks trace GP. Perhaps we don't need to dump these tasks again here. > + } > } > > /* Do one scan of the holdout list. */ > -- > 2.25.1