ヒッカカっている事を整理
完全に忘れている && いつ再開か微妙 (がしかし、そろそろこっち方面にゲンジツトウヒできそうな感じではある)。なので、ストップしている部分について整理しておく。
ストップしてるのは init_IRQ()#arch/i386/kernel/i8259.c → intr_init_hook()#arch/i386/mach-default/setup.c → apic_intr_init()#arch/i386/kernel/apic.c → set_intr_gate()#arch/i386/kernel/traps.c で使用されている _set_gate というマクロの中身の解析。
# とほほ、階層深スギ
要は
void __init apic_intr_init(void) { #ifdef CONFIG_SMP smp_intr_init(); #endif /* self generated IPI for local APIC timer */ set_intr_gate(LOCAL_TIMER_VECTOR, apic_timer_interrupt); /* IPI vectors for APIC spurious and error interrupts */ set_intr_gate(SPURIOUS_APIC_VECTOR, spurious_interrupt); set_intr_gate(ERROR_APIC_VECTOR, error_interrupt); /* thermal monitor LVT interrupt */ #ifdef CONFIG_X86_MCE_P4THERMAL set_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt); #endif }
で、いくつかの割込みを IDT に登録してるだけなんだよね、と言うと実もフタも無いんですが、set_intr_gate が何なのか、をきちんと追いかけないとイケナイのか、それともスルーなのか、というのが自分的なナニ。
intel のマニュアル vol.3 の 5.11 に記述してあるフォーマットのテーブルに関数ポインタを登録している、とゆーのも理解はしているんですが、_set_gate マクロの (以下略