From: Bjorn Helgaas Fix a lockup which Sid Boyce 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: Bjorn Helgaas Signed-off-by: Andrew Morton --- 25-akpm/arch/i386/kernel/acpi/boot.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff -puN arch/i386/kernel/acpi/boot.c~respect-edge-level-triggering-requested-in-acpi_register_gsi arch/i386/kernel/acpi/boot.c --- 25/arch/i386/kernel/acpi/boot.c~respect-edge-level-triggering-requested-in-acpi_register_gsi Fri Jun 11 15:22:01 2004 +++ 25-akpm/arch/i386/kernel/acpi/boot.c Fri Jun 11 15:22:01 2004 @@ -451,10 +451,12 @@ unsigned int acpi_register_gsi(u32 gsi, static u16 irq_mask; extern void eisa_set_level_irq(unsigned int irq); - if ((gsi < 16) && !((1 << gsi) & irq_mask)) { - Dprintk(KERN_DEBUG PREFIX "Setting GSI %u as level-triggered\n", gsi); - irq_mask |= (1 << gsi); - eisa_set_level_irq(gsi); + if (edge_level == ACPI_LEVEL_SENSITIVE) { + if ((gsi < 16) && !((1 << gsi) & irq_mask)) { + Dprintk(KERN_DEBUG PREFIX "Setting GSI %u as level-triggered\n", gsi); + irq_mask |= (1 << gsi); + eisa_set_level_irq(gsi); + } } } #endif _