gpt4 book ai didi

linux-kernel - 对于共享中断线,如何找到要使用的中断处理程序?

转载 作者:行者123 更新时间:2023-12-04 12:22:41 25 4
gpt4 key购买 nike

对于共享中断线,我可以有多个中断处理程序。内核将依次调用该特定共享行的所有处理程序。
据我所知,每个处理程序在调用时都会通知内核它是否是要调用的正确处理程序。

我的问题是这是如何确定的,有没有办法检查内存映射寄存器来告诉特定设备的状态,或者是否有其他硬件机制?处理程序如何知道相应的设备确实是发出中断的设备?

此信息是否通过设备和处理器中断线之间的中断 Controller 中继?

最佳答案

内核将依次调用该特定共享行的所有处理程序。

确切地。假设 Dev1 和 Dev2 共享 IRQ10。当为 IRQ10 产生中断时,全部 在这一行注册的 ISR 将被一一调用。

在我们的场景中,假设 Dev2 是产生中断的那个。如果 Dev1 的 ISR 先注册,则它的 ISR(即 Dev1 的 ISR)只先调用。在该 ISR 中,将验证中断状态寄存器是否存在中断。如果没有设置中断位(在这种情况下,导致 Dev2 引发了中断),那么我们可以确认中断是 不是 由 Dev1 生成 - 所以 Dev1 的 ISR 应该返回到内核 IRQ_NONE - 这意味着:“我没有处理那个中断”,所以内核继续下一个 ISR(即 Dev2 的 ISR),这反过来会 确实验证其对应的设备是否产生了中断,因此,该处理程序应该处理它并最终返回 IRQ_HANDLED - 这意味着:“我处理了这个”。

查看返回值 IRQ_NONE/IRQ_HANDLED想要查询更多的信息。

处理程序如何知道相应的设备是否发出了中断?

仅通过读取中断状态寄存器。

此信息是否通过设备和处理器中断线之间的中断 Controller 中继?

我不确定这一点。但是操作系统会根据 ISR 的返回值来处理调用 ISR。

关于linux-kernel - 对于共享中断线,如何找到要使用的中断处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14371513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com