【问题标题】:interrupt paradigms (MSI/MSI-X and legacy) in drivers驱动程序中的中断范例(MSI/MSI-X 和旧版)
【发布时间】:2015-10-29 20:30:30
【问题描述】:

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

  • 基于传统引脚的 INTx
  • 微星
  • MXI-X

我想在我的驱动程序中支持所有三种模式,并在module_param() 宏中传递一个intr_type 参数。我想知道一般的经验法则是什么:如果默认情况下命令行参数为空,支持 MSI 还是 MSI-X? 既然 MSI 和 MSI-X 在逻辑上很接近,那么应该首选哪一个?

例如:如果驱动程序检测到设备支持 MSI-X,这是否足以尝试启用 MSI-X 并在驱动程序中使用它,并在失败的情况下恢复到旧版 INTx ?

谢谢。

【问题讨论】:

    标签: linux-kernel linux-device-driver interrupt interrupt-handling


    【解决方案1】:

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

    MSI-X 旨在克服 MSI 的一些缺点。如果您不知道它们是什么,那么它们可能对您的驱动程序无关紧要,您可以选择其中任何一种。

    【讨论】:

    • 感谢 cmets。我知道 MSI-X 最多允许设备分配 2048 个中断。除此之外,MSI 和 MSI-X 的行为相似,对吗?
    • 还有一些不同,但确实是相似的。
    【解决方案2】:

    基本上,您只需查询端点功能即可获得 MSI/MSIX 支持。

    grep 为:PCI_CAP_ID_MSIPCI_CAP_ID_MSIX

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      相关资源
      最近更新 更多