任何机构都可以说明为什么MSI中断不能在linux中共享。为什么MSI中断不共享?
基于PIN的中断可以被设备共享,但MSI中断不被设备共享,每个设备都有自己的MSI IRQ编号。为什么不能共享MSI中断?
任何机构都可以说明为什么MSI中断不能在linux中共享。为什么MSI中断不共享?
基于PIN的中断可以被设备共享,但MSI中断不被设备共享,每个设备都有自己的MSI IRQ编号。为什么不能共享MSI中断?
中断共享是由于资源限制而导致的,比如没有足够的物理IRQ线路用于每个需要关注的设备。如果中断由具有大ID空间的消息表示,为什么要这样做?
“那”意思是:给他们相同的身份,这样设备就必须被探测出来,以确定哪些碰撞到相同ID的人实际上中断了。实际上,我们有时希望对一个设备有多个中断。例如,如果中断ID不仅告诉我们哪个设备因为输入到达或输出缓冲器的消耗而中断了原因,这很有用:如果中断线是“便宜的”,因为它们只是带有许多位的软件ID,我们可以拥有这些。
旧的INTx中断具有两个问题的性质:
的后果是
通常情况下,两种情况都由驱动程序读取其设备的中断状态寄存器来处理。
消息信号中断不需要单独的信号线,而是通过数据总线作为消息发送。这意味着相同的硬件可以支持更多的中断(因此不需要共享),并且中断消息会自动与任何DMA访问同步。因此,中断处理程序不需要做任何事情;中断保证来自其设备,并且DMA的数据已经保证已经到达。
如果一些驱动程序被写入共享一些MSI,中断处理程序将再次检查中断是否实际来自它自己的设备,并且与INTx中断没有任何优势。
MSI的不共享,因为它不会是可能,但因为它不是必要。
请注意,共享的MSI实际上是可能的:从/proc/interrupts
在此摘录看出,高级错误报告,电源管理事件,以及热插拔驱动器共享一个中断:
64: 0 0 PCI-MSI-edge aerdrv, PCIe PME, pciehp
这些驱动程序实际上是附着在相同设备,但他们仍然表现类似的INTx驱动程序,即注册其中断与IRQF_SHARED
和中断处理程序检查它是否是他们自己的功能,所提出的中断。