local APIC 初期化の続き init_IRQ での処理編 (その2)
続きを順に見ていきます。まずは下記の手続き。
/* * Cover the whole vector space, no vector can escape * us. (some of these will be overridden and become * 'special' SMP interrupts) */ for (i = 0; i < (NR_VECTORS - FIRST_EXTERNAL_VECTOR); i++) { int vector = FIRST_EXTERNAL_VECTOR + i; if (i >= NR_IRQS) break; if (vector != SYSCALL_VECTOR) set_intr_gate(vector, interrupt[i]); }
これについてもinterrupt シンボルの解決にて上記コードを引用しとる。)
ちょっと気になっていたのは、APIC は interrupt な配列使わんのかな (amazon:Linuxカーネル解析入門の APIC な部分について BUILD_INTERRUPT マクロについての記述があったなぁ、という事から勝手に類推してた) と思っていたのだけれど、アレ (BUILD_INTERRUPT マクロ) はおそらく特別なナニに適用する割り込みを定義するために使用しているのだろうな、と。別途検証する機会があると思います。
というのも上記処理のコメントにそういった意図が盛り込まれているように見えたので。