*参照元 [#ocd9ebb8] #backlinks *説明 [#g9d2c8bb] -パス: [[linux-2.6.33/arch/x86/kernel/irq.c]] -FIXME: これは何? --説明 **引数 [#fa09eecb] -struct pt_regs *regs -- --[[linux-2.6.33/pt_regs]] **返り値 [#v74a78e8] -int -- **参考 [#f52200a5] *実装 [#z6c8091f] /* * do_IRQ handles all normal device IRQ's (the special * SMP cross-CPU interrupts have their own specific * handlers). */ unsigned int __irq_entry do_IRQ(struct pt_regs *regs) { struct pt_regs *old_regs = set_irq_regs(regs); - --[[linux-2.6.33/]] --[[linux-2.6.33/set_irq_regs()]] /* high bit used in ret_from_ code */ unsigned vector = ~regs->orig_ax; unsigned irq; exit_idle(); - --[[linux-2.6.33/exit_idle()]] irq_enter(); - --[[linux-2.6.33/irq_enter()]] irq = __get_cpu_var(vector_irq)[vector]; - --[[linux-2.6.33/__get_cpu_var()]] if (!handle_irq(irq, regs)) { ack_APIC_irq(); - --[[linux-2.6.33/handle_irq()]] --[[linux-2.6.33/ack_APIC_irq()]] if (printk_ratelimit()) pr_emerg("%s: %d.%d No irq handler for vector (irq %d)\n", __func__, smp_processor_id(), vector, irq); - --[[linux-2.6.33/printk_ratelimit()]] --[[linux-2.6.33/pr_emerg()]] } irq_exit(); - --[[linux-2.6.33/]] --[[linux-2.6.33/irq_exit()]] set_irq_regs(old_regs); return 1; } *コメント [#d29cfa37]