linux-kernel – 当我们使用irq_set_chained_handler时,irq线路是否会被禁用?

当我们使用irq_set_chained_handler时,当我们为关联的处理程序提供服务时,irq行不会被禁用,就像request_irq一样.
中断如何设置无关紧要.发生任何中断时,在中断处理程序期间将禁用所有中断(对于此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_DISABLED或SA_INTERRUPT标志时)运行时禁用中断,这些处理程序应该非常简短快速.另一方面,缓慢的中断在重新启用的中断下运行,因为缓慢中断的处理程序可能需要花费大量时间来处理.

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

通过this提交在Linux内核v2.6.35中更改了该行为.您可以找到有关此here的更多详细信息.

https://stackoverflow.com/questions/34391340/when-we-use-irq-set-chained-handler-the-irq-line-will-be-disabled-or-not

转载注明原文:linux-kernel – 当我们使用irq_set_chained_handler时,irq线路是否会被禁用?