aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2008-07-11 14:34:36 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-11 14:54:02 -0400
commit1baea6e2fea6f235b21f32a322cb6cb43ffdb704 (patch)
tree6badd627ee06db35f5ea2ed93d3061ef2a77d845
parent392a0fc96bd059b38564f5f8fb58327460cb5a9d (diff)
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 <macro@linux-mips.org> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Cc: Matthew Garrett <mjg59@srcf.ucam.org> Cc: Andreas Herrmann <andreas.herrmann3@amd.com> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/kernel/io_apic_32.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c
index 6b220b9dcbb3..50e1131a6ec6 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 = {
2052 .name = "local-APIC", 2052 .name = "local-APIC",
2053 .mask = mask_lapic_irq, 2053 .mask = mask_lapic_irq,
2054 .unmask = unmask_lapic_irq, 2054 .unmask = unmask_lapic_irq,
2055 .eoi = ack_apic, 2055 .ack = ack_apic,
2056}; 2056};
2057 2057
2058static void __init setup_nmi(void) 2058static void __init setup_nmi(void)
@@ -2257,8 +2257,8 @@ static inline void __init check_timer(void)
2257 2257
2258 printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); 2258 printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ...");
2259 2259
2260 set_irq_chip_and_handler_name(0, &lapic_chip, handle_fasteoi_irq, 2260 set_irq_chip_and_handler_name(0, &lapic_chip, handle_edge_irq,
2261 "fasteoi"); 2261 "edge");
2262 apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ 2262 apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */
2263 enable_8259A_irq(0); 2263 enable_8259A_irq(0);
2264 2264