%20UnCore.png)
Ich versuche, den Linux-Kernel-Code in Bezug auf die Uncore-Leistungsindikatoren für Skylake-Hardware zu verstehen. Der Code unterhttps://elixir.bootlin.com/linux/v4.15/source/arch/x86/events/intel/uncore_snbep.c#L3565verwendet auf magische Weise die Konstante 0x208d.
Wo finde ich die Bedeutung dieser Konstante und was stellt sie dar?
Danke,
Antwort1
Die Konstante wird in einem pci_get_device()
Funktionsaufruf verwendet; durch Klicken auf den Funktionsnamen können Sie sofort zu seinerDefinitionin drivers/pci/search.c. Der Code sieht folgendermaßen aus:
/** * pci_get_device - Suche nach einem PCI-Gerät starten oder fortsetzen durchHersteller-/Geräte-ID * @vendor: PCI-Anbieter-ID zum Abgleichen oder %PCI_ANY_ID zum Abgleichen aller Anbieter-IDs *@device: PCI-Geräte-IDzum Abgleichen oder %PCI_ANY_ID zum Abgleichen aller Geräte-IDs * ... */ Struktur pci_dev *pci_get_device (unsignierter int-Anbieter,unsigniertes int-Gerät, Struktur pci_dev *von) { ... }
Es sollte also offensichtlich sein, dass die Bedeutung des Parameters eine PCI-„Geräte-ID“ ist.
Was ist dann eine Geräte-ID?
Alle PCI-Geräte haben eine 16-Bit-Hersteller-ID und eine 16-Bit-Geräte-ID oder Modell-ID, die beim PCI-Scan gemeldet werden (siehe lspci -tvnn
). Das (Hersteller-, Geräte-)Paar wird verwendet, um den richtigen Treiber für das Gerät zu bestimmen.
PCI_VENDOR_ID_INTEL ist also ein Makro für die Vendor-ID von Intel (die natürlich 0x8086 ist und von PCI-SIG zugewiesen wird), und der nächste Parameter 0x208d gibt einen bestimmten Gerätetyp an (der von Intel selbst zugewiesen wird).
DerPCI-ID-Repositorybeschreibt das Gerät 8086:208d als „Sky Lake-E CHA Registers“ (Sie werden wahrscheinlich einen ähnlichen Namen in lspci sehen), also ist es wahrscheinlich nur ein virtuelles Gerät, das Teil des Skylake-Uncore ist.