Intel (Skylake) UnCore

Intel (Skylake) UnCore

Я пытаюсь понять код ядра Linux, касающийся счетчиков производительности uncore для оборудования Skylake. Код наhttps://elixir.bootlin.com/linux/v4.15/source/arch/x86/events/intel/uncore_snbep.c#L3565магическим образом использует константу 0x208d.

Где я могу узнать значение этой константы и что она собой представляет?

Спасибо,

решение1

Константа используется в pci_get_device()вызове функции; щелкнув имя функции, вы можете мгновенно перейти к ееопределениев drivers/pci/search.c. Код выглядит так:

/**
 * pci_get_device - начать или продолжить поиск устройства PCIидентификатор поставщика/устройства
 * @vendor: идентификатор поставщика PCI для сопоставления или %PCI_ANY_ID для сопоставления всех идентификаторов поставщиков
 *@device: идентификатор устройства PCIдля сопоставления или %PCI_ANY_ID для сопоставления всех идентификаторов устройств
 * ...
 */
struct pci_dev *pci_get_device(беззнаковое целое число поставщика,беззнаковое целое устройство,
                   структура pci_dev *из)
{
    ...
}

Поэтому должно быть очевидно, что значение параметра — это «идентификатор устройства» PCI.

Что же такое идентификатор устройства?

Все устройства PCI имеют 16-битный «идентификатор поставщика» и 16-битный «идентификатор устройства» или «идентификатор модели», которые сообщаются во время сканирования PCI (см. lspci -tvnn). Пара (поставщик, устройство) используется для определения правильного драйвера для устройства.

Итак, PCI_VENDOR_ID_INTEL — это макрос для идентификатора поставщика Intel (который, конечно же, равен 0x8086 и назначен PCI-SIG), а следующий параметр 0x208d указывает на конкретный тип устройства (назначенный самой Intel).

TheРепозиторий идентификаторов PCIописывает устройство 8086:208d как «Sky Lake-E CHA Registers» (вы, вероятно, увидите похожее название в lspci), так что это, вероятно, просто виртуальное устройство, являющееся частью ядра Skylake.

Связанный контент