%20UnCore.png)
Я пытаюсь понять код ядра 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.