在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

09-26 17:43