The backtrace of cpu_curr(other_cpu) is unwinded based on the 'fp' saved during its last switch-out. For the most part, it's out of date. So try to use NMI to get the backtrace first, just like those functions in "tree_stall.h" did. Such as rcu_dump_cpu_stacks(). Signed-off-by: Zhen Lei <thunder.leizhen@xxxxxxxxxx> --- kernel/rcu/tree_exp.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h index 0f70f62039a9090..21381697de23f0b 100644 --- a/kernel/rcu/tree_exp.h +++ b/kernel/rcu/tree_exp.h @@ -665,7 +665,8 @@ static void synchronize_rcu_expedited_wait(void) mask = leaf_node_cpu_bit(rnp, cpu); if (!(READ_ONCE(rnp->expmask) & mask)) continue; - dump_cpu_task(cpu); + if (!trigger_single_cpu_backtrace(cpu)) + dump_cpu_task(cpu); } } jiffies_stall = 3 * rcu_exp_jiffies_till_stall_check() + 3; -- 2.25.1