中毒症状??
とりあえずカーネルソースを開いていつでも見れる状態にしとかんと落着かん気がするのは気のせいだろーか。
ま、勉強は楽しい、とゆー事で。
割り込み処理の全体像を類推
kernel2.4 な文書によると
do_IRQ(割り込み番号IRQ、...) 同種の割り込みが入らないように、割込みのマスクを行う。 割込みに対するACKを割り込みコントローラに返す。 handle_IRQ_event(割り込み番号IRQ、irq_desc[]に登録されているハンドラのリスト) 割込みマスクの解除 handle_IRQ_event(割り込み番号IRQ、ハンドラリスト) 割り込みハンドラ開始宣言(irq_enter関数) if(割り込みのネストを許すハンドラなら) CPUの割り込み許可 登録されている場合は、全てのハンドラを呼ぶ。 CPUの割り込み禁止 割り込みハンドラ終了宣言(irq_exit関数)
割り込みハンドラの起動 (Linux V2.4 カーネル内部解析報告 ドラフト 第4 版)より引用
という事だったらしいが、2.6 では若干組み立てが異なる事がわかった。パクリで申し訳ないが 2.6 なナニを以下に。(間違っているかもしれません)
do_IRQ(割り込み番号IRQ、...) 割り込みハンドラ開始宣言(irq_enter関数) __do_IRQ() 割り込みハンドラ終了宣言(irq_exit関数) __do_IRQ(割り込み番号IRQ、...) 同種の割り込みが入らないように、割込みのマスクを行う。 割込みに対するACKを割り込みコントローラに返す。 handle_IRQ_event(割り込み番号IRQ、irq_desc[]に登録されているハンドラのリスト) 割込みマスクの解除 handle_IRQ_event(割り込み番号IRQ、ハンドラリスト) if(割り込みのネストを許すハンドラなら) CPUの割り込み許可 登録されている場合は、全てのハンドラを呼ぶ。 CPUの割り込み禁止
__do_IRQ()#kernel/irq/handle.c で微妙な手続きが見える。多分ここ、ポイント高いな。上記擬似コード的には足らない部分や間違いが多いです。(断言
# コード見たら不足だらけ。
__do_IRQ() チェキ入れてく方向でハンドル修正予定。
オモシロげなんだが、まず上記の擬似コードに修正いれる方向で。ツッコミ始めたらきりが無さげに見える。しかもアーキテクチャ依存、ではなくなってるあたり (ファイルの投入場所から推測) もナニ。