# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2005/03/18 16:30:29-05:00 len.brown@intel.com # [ACPI] S3 Suspend to RAM: interrupt resume fix # # Delete PCI Interrupt Link Device .resume method -- # it is the device driver's job to request interrupts, # not the Link's job to remember what the devices want. # # This addresses the issue of attempting to run # the ACPI interpreter too early in resume, when # interrupts are still disabled. # # http://bugzilla.kernel.org/show_bug.cgi?id=3469 # # Signed-off-by: David Shaohua Li # Signed-off-by: Len Brown # # drivers/acpi/pci_link.c # 2005/03/02 22:23:50-05:00 len.brown@intel.com +14 -22 # Delete PCI Interrupt Link .resume method # Index: linux-2.6.12/drivers/acpi/pci_link.c =================================================================== --- linux-2.6.12.orig/drivers/acpi/pci_link.c 2005-07-09 23:35:01.000000000 -0400 +++ linux-2.6.12/drivers/acpi/pci_link.c 2005-07-09 23:53:23.000000000 -0400 @@ -72,10 +72,12 @@ u8 active; /* Current IRQ */ u8 edge_level; /* All IRQs */ u8 active_high_low; /* All IRQs */ - u8 initialized; u8 resource_type; u8 possible_count; u8 possible[ACPI_PCI_LINK_MAX_POSSIBLE]; + u8 initialized:1; + u8 suspend_resume:1; + u8 reserved:6; }; struct acpi_pci_link { @@ -530,6 +532,10 @@ ACPI_FUNCTION_TRACE("acpi_pci_link_allocate"); + if (link->irq.suspend_resume) { + acpi_pci_link_set(link, link->irq.active); + link->irq.suspend_resume = 0; + } if (link->irq.initialized) return_VALUE(0); @@ -713,38 +719,24 @@ return_VALUE(result); } - -static int -acpi_pci_link_resume ( - struct acpi_pci_link *link) -{ - ACPI_FUNCTION_TRACE("acpi_pci_link_resume"); - - if (link->irq.active && link->irq.initialized) - return_VALUE(acpi_pci_link_set(link, link->irq.active)); - else - return_VALUE(0); -} - - static int -irqrouter_resume( - struct sys_device *dev) +irqrouter_suspend( + struct sys_device *dev, + u32 state) { struct list_head *node = NULL; struct acpi_pci_link *link = NULL; - ACPI_FUNCTION_TRACE("irqrouter_resume"); + ACPI_FUNCTION_TRACE("irqrouter_suspend"); list_for_each(node, &acpi_link.entries) { - link = list_entry(node, struct acpi_pci_link, node); if (!link) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n")); continue; } - - acpi_pci_link_resume(link); + if (link->irq.active && link->irq.initialized) + link->irq.suspend_resume = 1; } return_VALUE(0); } @@ -856,7 +848,7 @@ static struct sysdev_class irqrouter_sysdev_class = { set_kset_name("irqrouter"), - .resume = irqrouter_resume, + .suspend = irqrouter_suspend, };