%20UnCore.png)
Estoy tratando de comprender el código del kernel de Linux con respecto a los contadores de rendimiento sin núcleo para el hardware Skylake. El código enhttps://elixir.bootlin.com/linux/v4.15/source/arch/x86/events/intel/uncore_snbep.c#L3565utiliza mágicamente la constante 0x208d.
¿Dónde puedo encontrar el significado de esta constante y lo representa?
Gracias,
Respuesta1
La constante se utiliza en una pci_get_device()
llamada de función; Al hacer clic en el nombre de la función, puede saltar instantáneamente a sudefiniciónen controladores/pci/search.c. El código se ve así:
/** * pci_get_device: comienza o continúa buscando un dispositivo PCIID de proveedor/dispositivo * @vendor: ID de proveedor de PCI para que coincida, o %PCI_ANY_ID para que coincida con todos los ID de proveedores *@device: identificación del dispositivo PCIpara que coincida, o %PCI_ANY_ID para que coincida con todos los ID de dispositivo *... */ estructura pci_dev *pci_get_device(proveedor int sin firmar,dispositivo int sin firmar, estructura pci_dev *de) { ... }
Por lo tanto, debería ser obvio que el significado del parámetro es un "ID de dispositivo" PCI.
Entonces, ¿qué es una identificación de dispositivo?
Todos los dispositivos PCI tienen una "ID de proveedor" de 16 bits y una "ID de dispositivo" o "ID de modelo" de 16 bits, que se informan durante el escaneo PCI (consulte lspci -tvnn
). El par (proveedor, dispositivo) se utiliza para determinar el controlador correcto para el dispositivo.
Entonces PCI_VENDOR_ID_INTEL es una macro para el ID del proveedor de Intel (que es, por supuesto, 0x8086, asignado por PCI-SIG), y el siguiente parámetro 0x208d indica un tipo de dispositivo específico (según lo asignado por Intel).
ElRepositorio de ID PCIdescribe el dispositivo 8086:208d como "Registros Sky Lake-E CHA" (probablemente verá un nombre similar en lspci), por lo que probablemente sea solo un dispositivo virtual que forma parte del uncore de Skylake.