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 <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Matthew Garrett <[email protected]>
Cc: Andreas Herrmann <[email protected]>
Cc: Stephen Rothwell <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
.name = "local-APIC",
.mask = mask_lapic_irq,
.unmask = unmask_lapic_irq,
- .eoi = ack_apic,
+ .ack = ack_apic,
};
static void __init setup_nmi(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);