当前位置:  开发笔记 > 编程语言 > 正文

为什么不共享MSI中断?

如何解决《为什么不共享MSI中断?》经验,为你挑选了1个好方法。

任何人都可以告诉为什么MSI中断在linux中不可共享.

基于PIN的中断可以由设备共享,但MSI中断不由设备共享,每个设备都有自己的MSI IRQ号.为什么不能共享MSI中断?



1> CL...:

旧的INTx中断有两个有问题的属性:

    每个INTx信号在硬件中需要单独的信号线; 和

    中断信号独立于其他数据信号,并以异步方式发送.

后果是

    多个设备和驱动程序需要能够共享中断(中断处理程序需要检查其设备是否实际引发了中断); 和

    当驱动程序收到中断时,它需要读取某个设备寄存器,以确保设备发出的任何先前的DMA写操作都在CPU上可见.

通常,两种情况都由驱动程序读取其设备的中断状态寄存器来处理.

消息信号中断不需要单独的信号线,而是通过数据总线作为消息发送.这意味着相同的硬件可以支持更多的中断(因此不必共享它),并且中断消息会自动与任何DMA访问同步.因此,中断处理程序不需要做任何事情; 保证中断来自其设备,并且保证DMA数据已经到达.

如果编写了一些驱动程序来共享某些MSI,那么中断处理程序将再次检查中断是否实际来自它自己的设备,并且没有优于INTx中断的优势.

MSI不是共享的,因为它不可能,但因为没有必要.


请注意,共享MSI实际上是可能的:如本摘录中所示/proc/interrupts,高级错误报告,电源管理事件和热插拔驱动程序共享一个中断:

64:          0          0   PCI-MSI-edge      aerdrv, PCIe PME, pciehp

这些驱动程序实际上连接到同一个设备,但它们的行为仍然类似于INTx驱动程序,即它们注册了它们的中断IRQF_SHARED,并且中断处理程序检查它们是否是它们自己的引发中断的函数.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有