
From: Bjorn Helgaas <bjorn.helgaas@hp.com>

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: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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
_
