私が読んでいる内容は地図時間request_irq
、私はこのトピックに初めて触れたので、確認するいくつかのアイデアが必要です。
- このフラグが設定されると、この割り込みハンドラの実行中にすべての割り込みを無効にするようにカーネルに指示します。
- 設定されていない場合、割り込みハンドラはすべての割り込みで実行されます。彼らが活性化することに加えて。
太字で示されている部分では、割り込みはどのようにして直列に実行されますか?つまり、一度に1つずつ実行されますか?
ベストアンサー1
参考までに、IRQF_DISABLEDフラグはLinuxカーネルから完全に削除されました。今回のアップデート。
フラグ全体を削除する2つの主な理由は次のとおりです。
- 複数のデバイスが物理割り込みラインを共有する場合(ハードウェアコストのため)、そのデバイスが処理する割り込みだけでなく、同じ物理割り込みラインを共有する他の割り込み信号も許可されます。
- さらに、割り込み処理中に割り込みが発生すると、他の割り込みを処理するために現在の割り込みコンテキストをカーネルスタックに格納する必要があるため、カーネルスタックがオーバーフローする可能性があります。
さらに、いくつかの遅延メカニズムの助けを借りて、カーネル割り込みハンドラの99.999%ができるだけ早く完了することが重要です。したがって、割り込みの特性(高速または遅い)に応じてIRQF_DISABLEDフラグを設定することは意味がありません。
あなたの質問に答えるために、IRQF_DISABLEDフラグを設定解除すると、他の割り込みが割り込みハンドラの実行を中断する可能性があるため、割り込みを1つずつ処理しません。これは、フラグが設定されていないとオーバーフローが発生する理由です。またお願いします詳細については、この記事を参照してください。