5

softirq (netfilter 事前ルーティング フック) とユーザー コンテキスト (ioctl 呼び出し内) の間でデータ構造を共有するカーネル モジュールを開発しています。

このリンクを読んだ後、(spin_lock_bhまたはを使用してspin_lock_irqsave) データを変更するときにユーザー コンテキストでソフトウェア割り込みを無効にし、共有データの操作が完了したら再度有効にする必要があることがわかりました。

ただし、softirq ハンドラー関数でロックを取得する必要があるかどうかはわかりません。ここでも (spin_lock を使用して) ロックを取得する必要がありますか?

別のsoftirqまたはhardirqとデータを共有する場合、softirqハンドラーでスピンロックを使用するだけでよいことを理解しています。私の理解は正しいですか?

4

1 に答える 1

4

同時に実行できるコードとデータを共有する場合は、ロックを取得する必要があります。カーネルは softirq と ioctl ハンドラーの両方を実行する可能性があるため、ロックを取得する必要があります。

spin_lock_bhまたはで割り込みをspin_lock_irqsave無効にすると、割り込みは現在のプロセッサでのみ無効になります。したがって、別のもので割り込みを処理しても問題ありません。

于 2013-07-11T19:28:29.797 に答える