可以抢占中断处理程序吗?

use*_*879 4 linux kernel interrupt linux-kernel

我知道linux会嵌套中断,其中一个中断可以"抢占"另一个中断,但是其他任务呢.

我只是想了解linux如何处理中断.它们是否可以被其他用户任务/内核任务抢占.

Ian*_*han 8

读取为什么在中断上下文中执行的内核代码/线程无法休眠?链接到Robert Loves的文章,我读到了这个:

某些中断处理程序(在Linux中称为快速中断处理程序)在本地处理器上的所有中断都禁用的情况下运行.这样做是为了确保中断处理程序尽可能快地运行而不会中断.更重要的是,所有中断处理程序在所有处理器上禁用其当前中断线时运行.这可确保同一中断线的两个中断处理程序不会同时运行.它还可以防止设备驱动程序编写者必须处理递归中断,这会使编程变得复杂.

所以AFIK所有IRQ都在中断处理程序中被禁用,因此它不能被中断!?

  • 默认情况下不会禁用所有 irq,只有在所有处理器上禁用相同的 irq。但是通过 request_irq 中的标志,您可以在处理中断时禁用本地处理器上的所有其他中断。 (2认同)
  • @Jagdish自2010年6月35日起,所有IRQ都在本地核心上禁用:请参阅https://github.com/torvalds/linux/commit/e58aa3d2d0cc01ad8d6f7f640a0670433f794922和https://github.com/torvalds/linux/commit/b738a50a202639614c 98b5763b01bf9201779e50 (2认同)