2015-12-20 18 views
6

MSI割り込みがlinuxで共有可能でない理由は、どのボディからも分かります。MSI割り込みが共有されないのはなぜですか?

PINベースの割り込みはデバイスで共有できますが、MSI割り込みはデバイスで共有されません。各デバイスは独自のMSI IRQ番号を取得します。 MSI割り込みを共有できないのはなぜですか?

答えて

4

割り込みの共有は、注意が必要なデバイスごとに十分な物理IRQラインがないなど、リソースの制約のためにハックです。割込みが大きいIDスペースを持つメッセージで表される場合、なぜそれをしますか?

"それは"同じIDを与えて、同じIDに衝突したデバイスのうち実際に割り込まれたデバイスを特定するためにデバイスをプローブする必要があることを意味します。

実際、1つのデバイスに対して複数の割り込みが発生することがあります。例えば、割り込みIDがどのデバイスが割り込みされたかだけでなく、入力が到着したか、または出力バッファが消耗したかのような理由もわかります。割込み線がビット数の多いソフトウェアIDであるため「安い」場合は、そのようにすることができます。

5

古いのINTxは、二つの問題の性質を有する割り込み:

  1. それぞれのINTx信号がハードウェアで別個の信号線を必要とします。
  2. 割り込み信号は他のデータ信号とは独立しており、これは非同期に送信されます。

結果は

  1. 複数のデバイスとドライバが(割り込みハンドラは、そのデバイスが実際に割り込みを上げるかどうかを確認する必要があります)、割り込みを共有できるようにする必要があるということです。ドライバが割り込みを受け取った場合、デバイスによって行われた以前のDMA書き込みがCPU上で確実に表示されるように、デバイスレジスタを読み出す必要があります。

通常、両方のケースは、デバイスの割り込みステータスレジスタを読み取るドライバによって処理されます。

メッセージ信号割り込みは、別々の信号線を必要としませんが、データバスを介してメッセージとして送信されます。これは、同じハードウェアがより多くの割り込みをサポートできるため(それを必要とせず共有する)、割り込みメッセージがDMAアクセスと自動的に同期されることを意味します。結果として、割り込みハンドラは何もする必要はありません。割り込みはそのデバイスから来ることが保証され、DMAのデータは既に到着していることが保証されます。

一部のドライバがMSIを共有するように書かれている場合、割り込みハンドラは割り込みが実際にそのデバイスから来ているかどうかをチェックする必要があり、INTx割り込みよりも利点はありません。

は可能ではないため、が必要ですが、が必要なので、MSIは共有されません。です。


MSIを共有することが実際に可能であることに注意してください:/proc/interruptsからこの抜粋に見られるように、高度なエラー報告、電源管理イベント、およびホットプラグドライバが1つの割り込みを共有:

64:   0   0 PCI-MSI-edge  aerdrv, PCIe PME, pciehp 

これらのドライバを実際にはと同じデバイスに接続されていますが、INTxドライバと同様の動作をします。すなわち、割り込みをIRQF_SHAREDに登録し、割り込みハンドラは割り込みを発生させた独自の関数かどうかを確認します。

関連する問題