在linux内核空闲循环中,对于许多体系结构(SH,ARM,X86等。afaik),以下几行:

if(cpuidle_idle_call())
    pm_idle();

我的疑问:

对于ARM,至少是默认的pm_idle函数,它由WFI(等待中断)指令组成,但令人困惑的部分是,中断被禁用,然后在WFI指令执行后被启用。当中断被执行时,CPU如何从WFI恢复在线状态残疾的?

我尝试在各种版本的linux中搜索我的答案,但是自2.6.32(我所指的最新版本)以来,相关代码没有更改,因此我很可能遗漏了一些东西。

最佳答案

即使禁用了中断,WFI也会唤醒,但是ARM内核直到再次启用中断后才接收中断。

10-04 12:59