首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我们使用irq_set_chained_handler时,irq行是否会被禁用?

当我们使用irq_set_chained_handler时,irq行是否会被禁用?
EN

Stack Overflow用户
提问于 2015-12-21 16:11:46
回答 2查看 1.7K关注 0票数 2

当我们使用irq_set_chained_handler时,当我们为相关的处理程序提供服务时,irq行不会被禁用或不被禁用,就像在request_irq的情况下一样。

EN

回答 2

Stack Overflow用户

发布于 2015-12-23 07:15:40

中断是如何设置的并不重要。当发生任何中断时,所有中断(针对此CPU)将在中断处理程序期间被禁用。例如,在ARM体系结构上,在C代码中发现中断处理的第一位是asm_do_IRQ()函数(在arch/arm/kernel/irq.c中定义)。它是从汇编程序代码中调用的。对于任何中断(无论是由request_irq()请求的还是由irq_set_chained_handler()请求的),都会调用相同的asm_do_IRQ()函数,并且ARM CPU会自动禁用中断。详情请参见this answer

历史笔记

另外,值得一提的是,不久前Linux内核提供了两种类型的中断:“快速”中断和“慢”中断。快速中断(当使用IRQF_DISABLEDSA_INTERRUPT标志时)是在禁用中断的情况下运行的,并且这些处理程序应该非常短和快速。另一方面,慢中断与重新启用的中断一起运行,因为慢中断的处理程序可能需要很长时间才能处理。

在Linux内核的现代版本中,所有中断都被认为是“快速”的,并且在运行时都禁用了中断。具有大量处理程序的中断必须以线程的形式实现(或者使用local_irq_enable_in_hardirq()在ISR中手动启用中断)。

在Linux v2.6.35中,this提交改变了这种行为。您可以找到有关此here的更多详细信息。

票数 5
EN

Stack Overflow用户

发布于 2015-12-22 12:43:14

参考https://www.kernel.org/doc/Documentation/gpio/driver.txt

这意味着使用irq_set_chained_handler()或相应的gpiochip_set_chained_irqchip()帮助器函数注册GPIO,并且GPIO处理程序将立即从父irqchip调用,同时保持IRQs禁用。然后,GPIO irqchip将在其中断处理程序中调用类似以下序列的内容:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34391340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档