极术小姐姐 · 2019年12月19日

在启动辅助CPU时通过哪个指令触发辅助内核

seconday cpu的启动由主内核启动。在主CPU上完成了一些工作,在辅助CPU上完成了一些工作,以完成cpu_up的热插拔操作。

我试图找到在主cpu上执行的确切指令,该指令触发辅助cpu的启动,然后它将检查pen_release变量的值。

您能否解释一下启动辅助cpu的过程,以及在启用了SMP的Linux内核中使用pen_release global的情况。

1 个回答 得票排序 · 时间排序
棋子 · 2019年12月19日

免责声明-我不是Linux专家)

通过Linux内核(Linaro Stable 3.14.22),代码似乎位于./arch/arm64/kernel/smp_spin_table.c中(我假设是ARMv8)。特别:

静态int smp_spin_table_cpu_boot(unsigned int cpu)
{
/ *
*更新笔释放标志。

  • /

write_pen_release(cpu_logical_map(cpu));

/ *
*发送一个事件,使辅助副本读取pen_release。

  • /

sev();

返回0;
}

因此,看起来内核正在向内存中写入标志,然后使用SEV指令唤醒其他内核。

其他内核将处于WFE循环中,每次唤醒时都会检查pen_release变量。

你的回答