diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2008-07-11 14:34:36 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-11 14:54:02 -0400 |
commit | 1baea6e2fea6f235b21f32a322cb6cb43ffdb704 (patch) | |
tree | 6badd627ee06db35f5ea2ed93d3061ef2a77d845 | |
parent | 392a0fc96bd059b38564f5f8fb58327460cb5a9d (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.c | 6 |
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 | ||
2058 | static void __init setup_nmi(void) | 2058 | static 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 | ||