1

我需要转储所有 CPU 的 CPU 回溯。

在 linux 中,我们dump_stack可以使用它来转储当前 cpu 的堆栈。

我的要求是打印在所有 CPU(在我的情况下为 4 个 CPU)上运行的进程的调用堆栈。我们该怎么做?是否有为此预先构建的 API?

4

1 回答 1

2

为了在其他 CPU 上触发某些东西,平台使用 IPI。

在 arm 上执行此操作的逻辑定义在 smp_send_all_cpu_backtrace()-> 文件 -kernel/arch/arm/kernel/smp.c

这会将 IPI 发送到所有 CPU 以转储堆栈。如果你想在你的代码中使用它,请使用平台无关的包装器arch_trigger_all_cpu_backtrace()包括asm/irq.h

#include <asm/irq.h>

void dump_all_cpu_stack(void)
{
     arch_trigger_all_cpu_backtrace();
}
于 2013-11-28T05:18:52.657 回答