x86: apic - introduce dummy apic operations
Impact: refactor, speed up and robustize code In case if apic was disabled by kernel option or by hardware limits we can use dummy operations in apic->write to simplify the ack_APIC_irq() code. At the lame time the patch fixes the missed EOI in do_IRQ function (which has place if kernel is compiled as X86-32 and interrupt without handler happens where apic was not asked to be disabled via kernel option). Note that native_apic_write_dummy() consists of WARN_ON_ONCE to catch any buggy writes on enabled APICs. Could be removed after some time of testing. Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> LKML-Reference: <20090412165058.724788431@openvz.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
c0eaa4536f
commit
08306ce61d
@ -27,7 +27,6 @@ void ack_bad_irq(unsigned int irq)
|
||||
if (printk_ratelimit())
|
||||
pr_err("unexpected IRQ trap at vector %02x\n", irq);
|
||||
|
||||
#ifdef CONFIG_X86_LOCAL_APIC
|
||||
/*
|
||||
* Currently unexpected vectors happen only on SMP and APIC.
|
||||
* We _must_ ack these because every local APIC has only N
|
||||
@ -37,9 +36,7 @@ void ack_bad_irq(unsigned int irq)
|
||||
* completely.
|
||||
* But only ack when the APIC is enabled -AK
|
||||
*/
|
||||
if (cpu_has_apic)
|
||||
ack_APIC_irq();
|
||||
#endif
|
||||
ack_APIC_irq();
|
||||
}
|
||||
|
||||
#define irq_stats(x) (&per_cpu(irq_stat, x))
|
||||
@ -214,10 +211,7 @@ unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
|
||||
irq = __get_cpu_var(vector_irq)[vector];
|
||||
|
||||
if (!handle_irq(irq, regs)) {
|
||||
#ifdef CONFIG_X86_64
|
||||
if (!disable_apic)
|
||||
ack_APIC_irq();
|
||||
#endif
|
||||
ack_APIC_irq();
|
||||
|
||||
if (printk_ratelimit())
|
||||
pr_emerg("%s: %d.%d No irq handler for vector (irq %d)\n",
|
||||
|
Reference in New Issue
Block a user