Commit ff75bb72 authored by Len Brown's avatar Len Brown Committed by Len Brown

[ACPI] Fix a lockup which Sid Boyce <sboyce@blueyonder.co.uk>

discovered with IOAPIC disabled.

The problem was that drivers/serial/8250_acpi.c found COM1 in the ACPI
namespace and called acpi_register_gsi() to set up its IRQ.  ACPI tells us
that the COM1 IRQ is edge triggered, active high, but acpi_register_gsi()
was ignoring the edge_level argument, so it blindly set the COM1 IRQ to be
level-triggered.
Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Andrew Morton <akpm@osdl.org
parent 04a4327c
...@@ -450,12 +450,14 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) ...@@ -450,12 +450,14 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
static u16 irq_mask; static u16 irq_mask;
extern void eisa_set_level_irq(unsigned int irq); extern void eisa_set_level_irq(unsigned int irq);
if (edge_level == ACPI_LEVEL_SENSITIVE) {
if ((gsi < 16) && !((1 << gsi) & irq_mask)) { if ((gsi < 16) && !((1 << gsi) & irq_mask)) {
Dprintk(KERN_DEBUG PREFIX "Setting GSI %u as level-triggered\n", gsi); Dprintk(KERN_DEBUG PREFIX "Setting GSI %u as level-triggered\n", gsi);
irq_mask |= (1 << gsi); irq_mask |= (1 << gsi);
eisa_set_level_irq(gsi); eisa_set_level_irq(gsi);
} }
} }
}
#endif #endif
#ifdef CONFIG_X86_IO_APIC #ifdef CONFIG_X86_IO_APIC
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment