在linux内核中,文件arch/arm/mach-exynos/cpuidle.c中包含以下代码:
local_irq_disable();
cpu_do_idle();
local_irq_enable();
cpu_do_idle在哪里
dsb
wfi
mov pc, lr
在cpu_do_idle中,它执行“wfi”命令,该命令表示等待中断。
但是,我不明白的是,它在禁用irq之后进入cpu_do_idle。
这是怎么发生的?
最佳答案
WFI
等待硬件中断,而不管CPU当前的中断处理状态如何。当CPU唤醒时,它有机会重新启用中断并处理所有未决的中断:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/CIHEGBBF.html