我需要转储所有 CPU 的 CPU 回溯。
在 linux 中,我们dump_stack
可以使用它来转储当前 cpu 的堆栈。
我的要求是打印在所有 CPU(在我的情况下为 4 个 CPU)上运行的进程的调用堆栈。我们该怎么做?是否有为此预先构建的 API?
我需要转储所有 CPU 的 CPU 回溯。
在 linux 中,我们dump_stack
可以使用它来转储当前 cpu 的堆栈。
我的要求是打印在所有 CPU(在我的情况下为 4 个 CPU)上运行的进程的调用堆栈。我们该怎么做?是否有为此预先构建的 API?
为了在其他 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();
}