[ARM][Q]cpuidle wfi之前关中断后怎么被中断踢出wfi

cpuidle 中断疑惑点,为什么wfi之前local_irq_disable还能被中断把core踢出wfi?

GIC和各个CPU的接口包括两种硬件信号:

(a)触发CPU中断的信号。nIRQCPU和nFIQCPU信号线,熟悉ARM CPU的工程师对这两个信号线应该不陌生,主要用来触发ARM cpu进入IRQ mode和FIQ mode。

(b)Wake up信号。nFIQOUT和nIRQOUT信号线,去ARM CPU的电源管理模块,用来唤醒CPU的 。

因此disable了CPU的中断仅仅是堵死了中断这一个分支而已,wakeup信号仍在正常工作中。 关全局中断,意味着CPU不再处理(handler)GIC送来的中断,但并不说明GIC送来的中断不能唤醒CPU。 因此,suspend之后,产生中断,CPU醒来,继续执行,直到全局中断再次enable(arch_suspend_enable_irqs),CPU才会跳转到指定的中断handler中去处理中断


版权声明:本文为biaohuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。