在linux内核空闲循环中,对于许多体系结构(SH,ARM,X86等。afaik),以下几行:
if(cpuidle_idle_call())
pm_idle();
我的疑问:
对于ARM,至少是默认的pm_idle函数,它由WFI(等待中断)指令组成,但令人困惑的部分是,中断被禁用,然后在WFI指令执行后被启用。当中断被执行时,CPU如何从WFI恢复在线状态残疾的?
我尝试在各种版本的linux中搜索我的答案,但是自2.6.32(我所指的最新版本)以来,相关代码没有更改,因此我很可能遗漏了一些东西。
最佳答案
即使禁用了中断,WFI也会唤醒,但是ARM内核直到再次启用中断后才接收中断。