同じドライバの2つの割り込みハンドラ

同じドライバの2つの割り込みハンドラ

私のドライバが2つの異なるIRQラインから2つの異なる割り込みを受け取る必要があるシナリオがあります。 2つの異なるIRQを登録し、単一のドライバ用に2つの異なるハンドラをインストールできますか?これを達成するための最良の方法は何ですか?

PS:これはLinuxデバイスドライバであり、両方のIRQは共有されていません。

ベストアンサー1

2つの異なるIRQを登録し、単一のドライバ用に2つの異なるハンドラをインストールします。

「とても簡単です」 「可能ですか?」への答えは「はい」です。


同じ CPU のデバイス割り込みルーチンは互いに割り込みません。

LDD3(これはかなり古いもの)によると、単一の割り込みルーチンが複数のCPUで同時に実行されないことを保証します。これが何を意味するのかよく分からない。タイマー割り込みに適用されることを想像することはできません。

あなたのドライバでは、異なる割り込みルーチンが異なるCPUで同時に実行されることを望みます。

しかし、必要に応じてミューテックスを実装する一般的な「スピンロックirqsave」は、この場合でもまだうまく機能します。

テストシステムでNMIウォッチドッグとlockdepが有効になっていることを再確認することをお勧めします:)割り込みルーチン中にCPUが回転状態に閉じ込められると、NMI監視がトリガされます。

https://static.lwn.net/images/pdf/LDD3/ch10.pdf

おすすめ記事