?当然是等到local_irq_enable()之后。resume流程如下图。resume,马上为你讲解syscore的用意。先看看什么是syscore。最后才能suspend。我教你个方法,在注册的中断handle中加上一句WARN_ON(1);语句,请查看log信息即可。flag,又irq_disable关闭了中断。dpm_resume_noirq()我们来继续分析2.3节resume的后续流程,把图继续搬过来。cpu之后,开始dpm_resume_noirq()。handle,因此相当于noirq。resume_noirq成员。resume操作,如果不需要resume就可以使用,那么完全没有必要resume_noirq。resume_device_irqs中会帮我们把已经enable_irq_wake的设备进行disable_irq_wake,但是前提是driver中通过2.2节中途径1的方式。resume_irqs继续调用,最终会enable所有在susoend中关闭的irq。handle执行的真凶。int类型的数组,每一个bit都代表一个irq是否resend。在resend_irqs函数中,通过判断irqs_resend变量中的每一个bit位是否为1(即是否需要resend,也就是调用irq注册的中断handle)。handler执行完毕。handler执行完毕。thread正在执行,IRQD_IRQ_INPROGRESS在handle_irq_event()执行开始设置,等到handle_irq_event_percpu()执行完毕之后,同样在handle_irq_event()之后清除。handler情况也是这样吗?在__handle_irq_event_percpu()函数中通过__irq_wake_thread()函数唤醒irq_thread线程。IRQTF_RUNTHREAD标志位,代表irq线程已经正在运行,因此无需重新唤醒,直接返回即可。irq_thread。handler执行完毕,所以系统不会睡眠,放心好了。pm_wakeup_pending()主要是判断combined_event_count变量在suspend的过程中是否改变,如果改变suspend就应该abort。pm_stay_awake()和pm_relax()。