我正在研究一个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