MSI割り込みがlinuxで共有可能でない理由は、どのボディからも分かります。MSI割り込みが共有されないのはなぜですか?
PINベースの割り込みはデバイスで共有できますが、MSI割り込みはデバイスで共有されません。各デバイスは独自のMSI IRQ番号を取得します。 MSI割り込みを共有できないのはなぜですか?
MSI割り込みがlinuxで共有可能でない理由は、どのボディからも分かります。MSI割り込みが共有されないのはなぜですか?
PINベースの割り込みはデバイスで共有できますが、MSI割り込みはデバイスで共有されません。各デバイスは独自のMSI IRQ番号を取得します。 MSI割り込みを共有できないのはなぜですか?
割り込みの共有は、注意が必要なデバイスごとに十分な物理IRQラインがないなど、リソースの制約のためにハックです。割込みが大きいIDスペースを持つメッセージで表される場合、なぜそれをしますか?
"それは"同じIDを与えて、同じIDに衝突したデバイスのうち実際に割り込まれたデバイスを特定するためにデバイスをプローブする必要があることを意味します。
実際、1つのデバイスに対して複数の割り込みが発生することがあります。例えば、割り込みIDがどのデバイスが割り込みされたかだけでなく、入力が到着したか、または出力バッファが消耗したかのような理由もわかります。割込み線がビット数の多いソフトウェアIDであるため「安い」場合は、そのようにすることができます。
古いのINTxは、二つの問題の性質を有する割り込み:
結果は
通常、両方のケースは、デバイスの割り込みステータスレジスタを読み取るドライバによって処理されます。
メッセージ信号割り込みは、別々の信号線を必要としませんが、データバスを介してメッセージとして送信されます。これは、同じハードウェアがより多くの割り込みをサポートできるため(それを必要とせず共有する)、割り込みメッセージがDMAアクセスと自動的に同期されることを意味します。結果として、割り込みハンドラは何もする必要はありません。割り込みはそのデバイスから来ることが保証され、DMAのデータは既に到着していることが保証されます。
一部のドライバがMSIを共有するように書かれている場合、割り込みハンドラは割り込みが実際にそのデバイスから来ているかどうかをチェックする必要があり、INTx割り込みよりも利点はありません。
は可能ではないため、が必要ですが、が必要なので、MSIは共有されません。です。
MSIを共有することが実際に可能であることに注意してください:/proc/interrupts
からこの抜粋に見られるように、高度なエラー報告、電源管理イベント、およびホットプラグドライバが1つの割り込みを共有:
64: 0 0 PCI-MSI-edge aerdrv, PCIe PME, pciehp
これらのドライバを実際にはと同じデバイスに接続されていますが、INTxドライバと同様の動作をします。すなわち、割り込みをIRQF_SHARED
に登録し、割り込みハンドラは割り込みを発生させた独自の関数かどうかを確認します。