Linux kernel 驱动程序中的中断范例(MSI/MSI-X和旧版)

Linux kernel 驱动程序中的中断范例(MSI/MSI-X和旧版),linux-kernel,linux-device-driver,interrupt,interrupt-handling,Linux Kernel,Linux Device Driver,Interrupt,Interrupt Handling,假设PCI硬件支持三种可用的中断范例: 基于传统pin的INTx 微星 MXI-X 我想在我的驱动程序中支持所有三种模式,并在module\u param()宏中传递intr\u type参数。我想知道一般的经验法则是什么:如果默认情况下命令行参数为空,是否支持MSI或MSI-X? 既然MSI和MSI-X在逻辑上是相近的,那么最好使用哪一个呢 例如:如果驱动程序检测到设备支持MSI-X,这是否足以尝试启用MSI-X并在驱动程序中使用它,并且在出现故障时恢复到旧的INTx 谢谢。INTx中断可

假设PCI硬件支持三种可用的中断范例:

  • 基于传统pin的INTx
  • 微星
  • MXI-X
我想在我的驱动程序中支持所有三种模式,并在
module\u param()
宏中传递
intr\u type
参数。我想知道一般的经验法则是什么:如果默认情况下命令行参数为空,是否支持MSI或MSI-X? 既然MSI和MSI-X在逻辑上是相近的,那么最好使用哪一个呢

例如:如果驱动程序检测到设备支持MSI-X,这是否足以尝试启用MSI-X并在驱动程序中使用它,并且在出现故障时恢复到旧的INTx


谢谢。

INTx中断可能是共享的,因此驱动程序必须始终检查自己的设备是否是中断源。通常,您希望避免这种情况


MSI-X旨在克服MSI的一些缺点。如果您不知道这些是什么,那么它们可能对您的驱动程序并不重要,您可以选择其中之一。

基本上,您可以查询端点功能以获得MSI/MSIX支持

grep for:
PCI_CAP_ID_MSI
PCI_CAP_ID_MSIX


如果不支持,您应该从MSIX回退到MSI和INT。

谢谢您的评论。我知道MSI-X允许一个设备分配多达2048个中断。除了MSI和MSI-X的行为相似,对吗?还有其他的区别,但它们确实相似。