%20%E3%82%A2%E3%83%B3%E3%82%B3%E3%82%A2.png)
私はSkylakeハードウェアのアンコアパフォーマンスカウンタに関するLinuxカーネルコードを理解しようとしています。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デバイスの検索を開始または継続するベンダー/デバイス ID * @vendor: 一致する PCI ベンダー ID、またはすべてのベンダー ID に一致する %PCI_ANY_ID *@device: PCI デバイス ID一致する場合は%PCI_ANY_ID、すべてのデバイスIDに一致する場合は%PCI_ANY_ID * ... */ 構造体pci_dev *pci_get_device(符号なし整数ベンダー、符号なし整数デバイス、 構造体pci_dev *から) { ... }
したがって、パラメータの意味は PCI「デバイス ID」であることは明らかです。
では、デバイス ID とは何でしょうか?
すべての PCI デバイスには、16 ビットの「ベンダー ID」と 16 ビットの「デバイス ID」または「モデル ID」があり、これらは PCI スキャン中に報告されます (を参照lspci -tvnn
)。(ベンダー、デバイス) のペアは、デバイスの正しいドライバーを決定するために使用されます。
したがって、PCI_VENDOR_ID_INTEL は Intel のベンダー ID (もちろん PCI-SIG によって割り当てられた 0x8086) のマクロであり、次のパラメーター 0x208d は特定のデバイス タイプ (Intel 自身によって割り当てられたもの) を示します。
のPCI ID リポジトリデバイス 8086:208d は「Sky Lake-E CHA Registers」として記述されています (lspci でも同様の名前が表示される可能性があります)。したがって、これはおそらく Skylake uncore の一部である仮想デバイスです。