x86拱门上针对Virtualbox的多消息信号中断(MSI)支持

时间:2018-09-19 19:44:27

标签: virtualbox x86-64 interrupt pci-e

我有一个自定义PCIe端点(支持基本功能的通用端点),并将多个MSI功能的IRQ向量设置为16。但是当我运行x86_64位来宾ubuntu桌面操作系统时,该操作系统具有配置MSI Enable向量的PCIe主机控制器[ [MSI控制寄存器中的位6:4],它总是返回配置的1个MSI。它在virtualbox环境上运行。

因此,不支持多个MSI。

pci_alloc_irq_vectors()API用于在当前返回1的linux内核中设置多个启用msi的位[6:4],即,即使EP支持16,也仅设置一个MSI中断。pci_msi_vec_count()返回16

我的内核代码路径显示正在使用不支持MULTI MSI功能的PCI-MSI控制器。我已经打开了所有必需的IRQ_REMAP,PCI_MSI,PCI_DOMAINS *等。我似乎需要通过使用IR-PCI-MSI控制器域来打开多个MSI支持。但是一切都白费了。

需要有关以下查询的虚拟盒子专家的帮助:

  • 提供给ubuntu 18.04 64位操作系统的通用ACPI表是否对决定在pci扫描期间使用MSI控制器有任何影响? 如果是这样,我需要考虑采取什么步骤来启用多个msi支持。

  • 我可以看到TI的端点测试驱动程序功能在ARM体系结构上可以正常工作。但是在x86上它失败了。我正在使用在我的平台上编译的类似驱动程序,甚至可以为我的EP设备加载它。参见pci_endpoint_test.c for the driver being in use

任何有关此建议的建议都会受到赞赏。

我当前的设置:

检测到来宾cpu:英特尔至强E5 *

操作系统:ubuntu桌面18.04.1 64位(amd64)

arch:x86_64

linux内核尝试:4.14,4.18

谢谢。

1 个答案:

答案 0 :(得分:0)

我有一个症状相同的问题,发现我需要设置内核配置选项CONFIG_IRQ_REMAP = y。在驱动程序的Kconfig中添加了“ select IRQ_REMAP”。

此外,似乎需要英特尔虚拟化支持(VT-x)来重新映射中断。也许virtualbox不会将其提供给来宾。