Intel (Skylake) UnCore

Intel (Skylake) UnCore

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.

informação relacionada