PCI割り込みを有効/無効にする


8

PCIeドライバーを実装しています。割り込みを有効または無効にすることができるレベル、または割り込みを有効にする必要があるレベルを理解したいと思います。OSは、どのプラットフォームにも関連していると想定しているので、意図的に指定していません。レベルとは、次のことを意味します。

  • OS固有の割り込み処理フレームワーク
  • 割り込みは、PCI / PCIe構成スペースレジスタ(COMMANDレジスタなど)で無効または有効にできます。
  • 割り込みもデバイスレベルでマスクできます。たとえば、ホストに対して特定の割り込みをトリガーしないようにデバイスを構成できます。

PCIeで使用されている割り込みタイプ(INTxエミュレーション、MSIまたはMSI-X)は、ホストOSに配信する必要があることを理解しています。

だから私の質問は-実際にはすべてのレイヤーで割り込みを有効または無効にする必要があるのですか、それともハードウェアに最も近い、たとえば関連するPCIレジスタでのみ十分ですか?


1
Windows KMDFドライバーでは、使用する割り込みの種類(MSI vs INTx vs MSI-x)をドライバーの.infファイルで指定し、ドライバーフレームワークは、ロード時にPCIe構成スペース自体を正しく構成します。他のOSについては知りませんが、.infはWindows固有なので、おそらくOSに依存していると思います。
トムカーペンター

2
一般に、割り込みで何を実行するかを設定することにより、それらを完全に有効にする必要があります。それが完了すると、無効にするのは、デバイスを構成解除するまで(たとえば、電力節約のため)、
割り込みなしの

1
Linuxを使用している場合、アプリケーションにDMAフレームワークを使用できますか?それはとてもいいです、あなたはトランザクションを作成し、トランザクションが完了するとオプションのタイムアウトで戻ります-実際の割り込みを
騙す

@ pjc50、ドライバがINTxなどの特定のタイプの割り込みの使用を選択した場合、MSI_CAP pciレジスタを介したMSI / MSI-X割り込みの配信を無効にする必要がありますか?(およびその逆-MSIを使用する場合はINTxを無効にする)
マーク

回答:


1

オペレーティングシステムは通常、予期しない割り込みについて大声で不平を言います。これは、これらがドライバーのプログラミングエラーを簡単に検出できるためです。

通常、ハードウェアは、リセット後、構成を待機するかなり不活性な状態で起動します。この状態では、まだマッピングが確立されておらず、どの割り込みが発生するかわからないため、割り込みを生成する意味のある方法はありません。

構成中に、割り込みマッピングが存在し、カードは使用する割り込みライン(レガシーPCIとしてのINTA..INTD、またはMSI / MSI-X)を通知されますが、まだ割り込みを処理するドライバーはまだありません。Linuxには、ハードウェアが故障しているように見えるため、システムログに不満を示し、割り込みソースを無効にするデフォルトハンドラーがあります(つまり、デフォルトでは、すべての割り込みが有効になっていますが、ハンドラーが登録されている割り込みのみが実際に発生すると予想されます)。 。

ドライバーは最後に割り込みハンドラーを登録し、対象となる割り込みを有効にします。ドライバーが特定の条件に興味を持たなくなった場合は、デバイス内の割り込みを無効にする必要があります。これにより、デバイス固有の割り込みの原因がマスクされます-下層は「何かが起こった」ことだけを知っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.