我正在研究一个FPGA端点的网络驱动程序,它支持PCIe总线上的多消息MSI中断(不是msix).主处理器是运行在CentOS上的x86 Intel i7 620LM,内核为4.2.
FPGA端点正确地在其MSI功能寄存器中公布多个msi向量(0x101 = 32个可能的总向量).
据我所知,内核4.2中添加了多消息功能.不幸的是,当我打电话pci_enable_msi_range(pdev, 1, 32);
它只返回1
.当我打电话给pci_msi_vec_count(pdev);
它返回32
.我能够在一个向量上请求一个irq处理程序,它可以按预期工作.
有谁知道在x86架构上的Linux中是否实际支持多消息MSI向量?
更新: 我能够使用不同的SBC和i7-4700EQ处理器启用所有32个MSI向量.这是一个4.4-rc1内核.
更新:也 适用于4.2.
更新: 在这种情况下,问题出在coreboot中.一旦电路板供应商提供更新,我就能够使多个矢量工作.
我在Intel机器上使用多个MSI时也遇到了问题,与Linux内核版本无关.经过大量的摆弄后,我意识到在BIOS中启用VT-d解决了这个问题(在Linux 4.6内核上测试过).我认为这是因为为了在x86上支持多个MSI,Linux内核需要支持中断重映射,这是VT-d提供的功能之一.