我尝试使用
启用PCI MSInvec = pci_enable_msi_range(dev, 1, 4);
但是nvec总是返回1向量(我确信我的PCIe端点启用了MSI功能)。我发现原来的IRQ = 17已映射到109.所以我邀请MSI工作。但是,只有一个向量。 我跟踪内核源代码,发现问题原因在
pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
我的内核没有定义CONFIG_PCI_MSI_IRQ_DOMAIN。所以pci_msi_setup_msi_irqs定义为arch_setup_msi_irqs
#define pci_msi_setup_msi_irqs arch_setup_msi_irqs
int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
{
struct msi_desc *entry;
int ret;
/*
* If an architecture wants to support multiple MSI, it needs to
* override arch_setup_msi_irqs()
*/
if (type == PCI_CAP_ID_MSI && nvec > 1)
return 1;
...
}
我认为这是我的MSI失败的根本原因。
我的问题是