
From: Jes Sorensen <jes@trained-monkey.org>

There is a bug in the ACPI code found in 2.6.1-mm3 where if it can't find
the interrupt source for the ACPI System Control Interrupt Handler, it end
up trying to free irq 0.



---

 25-akpm/drivers/acpi/osl.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff -puN drivers/acpi/osl.c~acpi-frees-irq0 drivers/acpi/osl.c
--- 25/drivers/acpi/osl.c~acpi-frees-irq0	Thu Jan 15 14:43:12 2004
+++ 25-akpm/drivers/acpi/osl.c	Thu Jan 15 14:43:43 2004
@@ -257,13 +257,13 @@ acpi_os_install_interrupt_handler(u32 ir
 		return AE_OK;
 	}
 #endif
-	acpi_irq_irq = irq;
 	acpi_irq_handler = handler;
 	acpi_irq_context = context;
 	if (request_irq(irq, acpi_irq, SA_SHIRQ, "acpi", acpi_irq)) {
 		printk(KERN_ERR PREFIX "SCI (IRQ%d) allocation failed\n", irq);
 		return AE_NOT_ACQUIRED;
 	}
+	acpi_irq_irq = irq;
 
 	return AE_OK;
 }
@@ -271,12 +271,13 @@ acpi_os_install_interrupt_handler(u32 ir
 acpi_status
 acpi_os_remove_interrupt_handler(u32 irq, OSD_HANDLER handler)
 {
-	if (acpi_irq_handler) {
+	if (irq) {
 #ifdef CONFIG_IA64
 		irq = acpi_irq_to_vector(irq);
 #endif
 		free_irq(irq, acpi_irq);
 		acpi_irq_handler = NULL;
+		acpi_irq_irq = 0;
 	}
 
 	return AE_OK;

_
