visual studio microsoft español descargar community c linux-kernel linux-device-driver interrupt pci-e

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).