%20UnCore.png)
Estou tentando entender o código do kernel Linux em relação aos contadores de desempenho uncore para hardware Skylake. O código emhttps://elixir.bootlin.com/linux/v4.15/source/arch/x86/events/intel/uncore_snbep.c#L3565usa magicamente a constante 0x208d.
Onde posso encontrar o significado desta constante e ela representa?
Obrigado,
Responder1
A constante é usada em uma pci_get_device()
chamada de função; clicando no nome da função, você pode pular instantaneamente para seudefiniçãoem drivers/pci/search.c. O código fica assim:
/** * pci_get_device - comece ou continue procurando por um dispositivo PCIID do fornecedor/dispositivo * @vendor: ID do fornecedor PCI para corresponder ou %PCI_ANY_ID para corresponder a todos os IDs do fornecedor *@device: ID do dispositivo PCIpara corresponder ou %PCI_ANY_ID para corresponder a todos os IDs de dispositivos * ... */ struct pci_dev *pci_get_device(fornecedor interno não assinado,dispositivo interno não assinado, estrutura pci_dev *de) { ... }
Portanto, deve ser óbvio que o significado do parâmetro é um "ID do dispositivo" PCI.
O que é um ID de dispositivo, então?
Todos os dispositivos PCI possuem um "ID do fornecedor" de 16 bits e um "ID do dispositivo" ou "ID do modelo" de 16 bits, que são relatados durante a varredura PCI (consulte lspci -tvnn
). O par (fornecedor, dispositivo) é usado para determinar o driver correto para o dispositivo.
Portanto, PCI_VENDOR_ID_INTEL é uma macro para o ID do fornecedor da Intel (que é obviamente 0x8086, atribuído pelo PCI-SIG), e o próximo parâmetro 0x208d indica um tipo de dispositivo específico (conforme atribuído pela própria Intel).
ORepositório de ID PCIdescreve o dispositivo 8086:208d como "Sky Lake-E CHA Registers" (você provavelmente verá um nome semelhante em lspci), então provavelmente é apenas um dispositivo virtual que faz parte do uncore Skylake.