我有一个自定义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
谢谢。
答案 0 :(得分:0)
我有一个症状相同的问题,发现我需要设置内核配置选项CONFIG_IRQ_REMAP = y。在驱动程序的Kconfig中添加了“ select IRQ_REMAP”。
此外,似乎需要英特尔虚拟化支持(VT-x)来重新映射中断。也许virtualbox不会将其提供给来宾。