Intel (Skylake) UnCore

Intel (Skylake) UnCore

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.

verwandte Informationen