インテル (Skylake) アンコア

インテル (Skylake) アンコア

私は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 の一部である仮想デバイスです。

関連情報