我有一个自定义 PCIe 端点(支持基本功能的通用端点(,并将多个 MSI 功能 IRQ 向量设置为 16。但是当我运行具有配置 MSI 启用矢量的 PCIe 主机控制器的 x86_64 位来宾 ubuntu 桌面操作系统时[MSI 控制寄存器中的位 6:4],它总是返回 1 个配置的 MSI。它运行在虚拟盒子环境中。
因此,不支持多个 MSI。
pci_alloc_irq_vectors(( API 用于在当前返回 1 的 linux 内核中设置多个启用 msi 的位[6:4],即即使 EP 支持 16,也只设置一个 MSI 中断。 pci_msi_vec_count(( 返回 16。
我的内核代码路径显示正在使用不支持多 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 了解正在使用的驱动程序
任何关于相同的建议,不胜感激。
我目前的设置:
检测到客户机 CPU:英特尔至强 E5*
操作系统: ubuntu 桌面 18.04.1 64 位 (amd64(
拱门:x86_64
Linux 内核已尝试 : 4.14, 4.18
提前谢谢。
我遇到了一个具有相同症状的问题,发现我需要设置内核配置选项 CONFIG_IRQ_REMAP=y。 在驱动程序的 Kconfig 中添加了"选择IRQ_REMAP"。
此外,中断重新映射似乎需要英特尔虚拟化支持 (VT-x(。 也许虚拟盒子没有向客人提供这个。