You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用devm_request_threaded_irq()后需调用enable_irq()吗?二者需配对吗?

Linux中断enable_irq()相关问题解答

1. 何时需要调用enable_irq()

  • 当你通过disable_irq()或disable_irq_nosync()主动关闭某个中断后,需要恢复中断响应时调用
  • 部分硬件初始化后默认处于中断关闭状态,在注册完中断处理函数后,需要调用它来开启硬件中断(这种场景相对少见,多数内核中断注册接口会默认启用中断)
  • 临时屏蔽中断以执行临界区操作(比如避免中断打断敏感数据修改)后,恢复中断触发能力时调用

2. 调用devm_request_threaded_irq()后是否需要手动调用enable_irq()

不需要。devm_request_threaded_irq()内部已经默认完成了中断启用操作——只要注册成功,函数会自动调用enable_irq()。

唯一例外是旧版本内核中指定IRQF_DISABLED标志的情况,但该标志在Linux kernel 2.6.35之后已被废弃,现代内核中无需考虑。

3. enable_irq()是否必须与disable_irq()一一对应

是的。内核内部为每个中断维护了引用计数:

  • 每次调用disable_irq(),计数加1,中断不会真正被启用,直到计数减为0
  • 每次调用enable_irq(),计数减1,当计数归0时,中断才会恢复响应

举个例子:如果连续调用2次disable_irq(),必须对应调用2次enable_irq()才能让中断重新工作。

注意:disable_irq()会等待当前正在执行的中断处理函数完成后再返回,而disable_irq_nosync()不会等待,使用时需根据业务场景选择。

内容的提问来源于stack exchange,提问作者Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:50:38