microsoft - visual studio installer
¿Está implementado Multi Message MSI en Linux/x86? (3)
Por supuesto que es. No estoy seguro de por qué exactamente obtienes el error. pero he escrito algunos controladores que usaron más de 1 vector.
Acabo de comprobar mi PC en casa, tengo varios controladores que utilizan más el 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
Estoy trabajando en un controlador de red para un punto final FPGA que admita interrupciones MSI de múltiples mensajes (no msix) en un bus PCIe. El procesador host es un x86 Intel i7 620LM que se ejecuta en CentOS con un kernel 4.2.
El punto final FPGA anuncia correctamente múltiples vectores msi en su registro de capacidades MSI (0x101 = 32 vectores posibles totales).
Por lo que puedo decir, se agregó la funcionalidad de mensajes múltiples en kernel 4.2. Lamentablemente cuando llamo pci_enable_msi_range(pdev, 1, 32);
solo devuelve 1
. Cuando llamo a pci_msi_vec_count(pdev);
devuelve 32
. Puedo solicitar un controlador irq en el único vector y funciona como se esperaba.
¿Alguien sabe si los vectores MSI de mensajes múltiples son realmente compatibles con Linux en las arquitecturas x86?
ACTUALIZACIÓN: Pude obtener todos los 32 vectores MSI habilitados usando un SBC diferente con un procesador i7-4700EQ. Esto con un núcleo 4.4-rc1.
ACTUALIZACIÓN: Funciona con 4.2 también.
ACTUALIZACIÓN: en este caso, el problema estaba en coreboot. Pude hacer funcionar varios vectores una vez que el vendedor de la tabla proporcionó una actualización.
Tuve problemas para usar más de un MSI en una máquina Intel, independientemente de la versión del kernel de Linux. Después de mucho toquetear, me di cuenta de que habilitar VT-d en la BIOS solucionó el problema (probado en Linux 4.6 kernel). Creo que esto se debe a que para admitir múltiples MSI en x86, el kernel de Linux necesita soporte para la reasignación de interrupciones, que es una de las características proporcionadas por VT-d.
Para agregar a lo que Adrien mencionó, al encender CONFIG_IRQ_REMAP resolvió mi problema de poder solicitar múltiples MSI para el mismo dispositivo. pci_enable_msi_range tiene éxito con mis interrupciones msi solicitadas (8 en este caso).