为什么内核在内核接收中断时调用其他处理程序?

时间:2014-04-04 06:44:59

标签: linux-kernel

在linux内核开发中,我读到了关于内核接收到中断的中断,它会依次调用每个注册的处理程序。
我的问题是为什么内核调用其他处理程序?

2 个答案:

答案 0 :(得分:0)

这是因为有几个设备共享同一个中断线。内核可以检测调用哪个处理程序的唯一方法是将设备的dev_id传递给需要调用处理程序的所有处理程序。使用传递的dev_id注册的处理程序获得匹配并继续运行。

请记住,处理程序已注册为:

static irqreturn_t intr_handler(int irq, void *dev_id, struct pt_regs *regs)

通过传递dev_id来注册处理程序。因此,这是区分同一IRQ线路上设备的唯一因素。

答案 1 :(得分:0)

在一个良好定义的中断处理程序中,专门共享irq行,它将通过读取某些寄存器来检查特定设备是否引发了中断,如果是,则处理中断并返回IRQ_HANDLED,或者返回IRQ_NONE以表明该处理程序服务的设备不是。 因此,它会顺序调用该行上的每个已注册处理程序,直到处理程序返回IRQ_HANDLED意味着正确处理