我正在研究一个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中.一旦电路板供应商提供更新,我就能够使多个矢量工作.
解决方法
当然如此.
我不确定你为什么会得到这个错误.但我写了几个使用超过1个向量的驱动程序.
我不确定你为什么会得到这个错误.但我写了几个使用超过1个向量的驱动程序.
我刚刚在家检查了我的电脑,我有各种驱动程序使用更多的1 MSI IRQ:
$cat /proc/interrupts | grep -i msi 33: 5683962 0 0 0 0 0 0 0 PCI-MSI 524288-edge radeon 34: 0 0 0 0 0 0 0 0 PCI-MSI 1572864-edge xhci_hcd 35: 0 0 0 0 0 0 0 0 PCI-MSI 1572865-edge xhci_hcd 36: 0 0 0 0 0 0 0 0 PCI-MSI 1572866-edge xhci_hcd 37: 0 0 0 0 0 0 0 0 PCI-MSI 1572867-edge xhci_hcd 38: 0 0 0 0 0 0 0 0 PCI-MSI 1572868-edge xhci_hcd 39: 0 0 0 0 0 0 0 0 PCI-MSI 1572869-edge xhci_hcd 40: 0 0 0 0 0 0 0 0 PCI-MSI 1572870-edge xhci_hcd 41: 0 0 0 0 0 0 0 0 PCI-MSI 1572871-edge xhci_hcd 42: 3807594 0 0 0 0 0 0 0 PCI-MSI 512000-edge 0000:00:1f.2 43: 0 0 0 0 0 0 0 0 PCI-MSI 2097152-edge xhci_hcd 44: 0 0 0 0 0 0 0 0 PCI-MSI 2097153-edge xhci_hcd 45: 0 0 0 0 0 0 0 0 PCI-MSI 2097154-edge xhci_hcd 46: 0 0 0 0 0 0 0 0 PCI-MSI 2097155-edge xhci_hcd 47: 0 0 0 0 0 0 0 0 PCI-MSI 2097156-edge xhci_hcd 48: 0 0 0 0 0 0 0 0 PCI-MSI 2097157-edge xhci_hcd 49: 0 0 0 0 0 0 0 0 PCI-MSI 2097158-edge xhci_hcd 50: 0 0 0 0 0 0 0 0 PCI-MSI 2097159-edge xhci_hcd 51: 310762 0 0 0 0 0 0 0 PCI-MSI 5242880-edge 0000:0a:00.0 52: 11 0 0 0 0 0 0 0 PCI-MSI 360448-edge mei_me 54: 38991293 0 0 0 0 0 0 0 PCI-MSI 7340032-edge enp14s0 55: 1 0 0 0 0 0 0 0 PCI-MSI 32768-edge i915 56: 1169 0 0 0 0 0 0 0 PCI-MSI 442368-edge snd_hda_intel 57: 152 0 0 0 0 0 0 0 PCI-MSI 526336-edge snd_hda_intel $lscpu Architecture: x86_64 cpu op-mode(s): 32-bit,64-bit Byte Order: Little Endian cpu(s): 8 On-line cpu(s) list: 0-7 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel cpu family: 6 Model: 42 Model name: Intel(R) Core(TM) i7-2600K cpu @ 3.40GHz Stepping: 7 cpu MHz: 1634.257 cpu max MHz: 3800.0000 cpu min MHz: 1600.0000 BogoMIPS: 6825.67 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K NUMA node0 cpu(s): 0-7 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid xsaveopt