在 linux 内核空闲循环内部,对于相当多的架构(SH、ARM、X86 等。afaik)有以下几行:
if(cpuidle_idle_call())
pm_idle();
我的疑问:
至少对于 ARM,默认的 pm_idle 函数由 WFI(等待中断)指令组成,但令人困惑的是,中断随后被禁用并在 WFI 指令执行后启用,当中断发生时 CPU 如何从 WFI 恢复联机禁用?
我尝试在各种版本的 linux 中搜索我的答案,但相关代码自 2.6.32(我提到的最后一个版本)以来没有变化,所以我更有可能遗漏了一些东西。