From: Maciej W. Rozycki Date: Fri, 11 Jul 2008 18:34:36 +0000 (+0100) Subject: x86: L-APIC: Set IRQ0 as edge-triggered X-Git-Tag: v2.6.27-rc1~1106^2~18 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=1baea6e2fea6f235b21f32a322cb6cb43ffdb704;p=linux-2.6-omap-h63xx.git x86: L-APIC: Set IRQ0 as edge-triggered IRQ0 is edge-triggered, but the "8259A Virtual Wire" through the local APIC configuration in the 32-bit version uses the "fasteoi" handler suitable for level-triggered APIC interrupt. Rewrite code so that the "edge" handler is used. The 64-bit version uses different code and is unaffected. Signed-off-by: Maciej W. Rozycki Cc: "Rafael J. Wysocki" Cc: Matthew Garrett Cc: Andreas Herrmann Cc: Stephen Rothwell Signed-off-by: Ingo Molnar --- diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c index 6b220b9dcbb..50e1131a6ec 100644 --- a/arch/x86/kernel/io_apic_32.c +++ b/arch/x86/kernel/io_apic_32.c @@ -2052,7 +2052,7 @@ static struct irq_chip lapic_chip __read_mostly = { .name = "local-APIC", .mask = mask_lapic_irq, .unmask = unmask_lapic_irq, - .eoi = ack_apic, + .ack = ack_apic, }; static void __init setup_nmi(void) @@ -2257,8 +2257,8 @@ static inline void __init check_timer(void) printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); - set_irq_chip_and_handler_name(0, &lapic_chip, handle_fasteoi_irq, - "fasteoi"); + set_irq_chip_and_handler_name(0, &lapic_chip, handle_edge_irq, + "edge"); apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ enable_8259A_irq(0);