当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《当我们使用irq_set_chained_handler时,irq线是否会被禁用?》经验,为你挑选了1个好方法。

当我们使用irq_set_chained_handler时,当我们为关联的处理程序提供服务时,irq行不会被禁用,就像request_irq一样.



1> Sam Protsenk..:

中断如何设置无关紧要.发生任何中断时,在中断处理程序期间将禁用所有中断(对于此CPU).例如,在ARM体系结构中,首先在C代码中找到中断处理asm_do_IRQ()函数(在中定义arch/arm/kernel/irq.c).它是从汇编代码调用的.对于任何中断(它是否被请求request_irq()或通过irq_set_chained_handler())相同的asm_do_IRQ()函数被调用,并中断被禁止自动ARM CPU.有关详情,请参阅此答案.

历史笔记

此外,值得一提的是,前一段时间Linux内核提供了两种类型的中断:"快速"和"慢速"中断.快速中断(使用IRQF_DISABLEDSA_INTERRUPT标记时)运行时禁用中断,这些处理程序应该非常简短快速.另一方面,缓慢的中断正在运行重新启用的中断,因为缓慢中断的处理程序可能需要花费大量时间来处理.

在Linux内核的现代版本中,所有中断都被视为"快速",并且在禁用中断的情况下运行.具有大型处理程序的中断必须实现为线程化(或在ISR中手动启用中断local_irq_enable_in_hardirq()).

通过此提交在Linux内核v2.6.35中更改了该行为.你可以在这里找到更多相关细节.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有