tree 4ebfef965b37d4a7c56425521a26c960649594de
parent 4ceb5db9757aaeadcf8fbbf97d76bd42aa4df0d6
author Linus Torvalds <[EMAIL PROTECTED]> Tue, 02 Aug 2005 02:37:54 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Tue, 02 Aug 2005 02:37:54 -0700

Revert ACPI interrupt resume changes

If there are devices that use interrupts over a suspend event, ACPI must
restore the PCI interrupt links on resume.  Anything else breaks any
device that hasn't been converted to the new (dubious) PM rules.

Drivers that need the irq free/re-aquire sequence can be done one by one
independently of this one.

 drivers/acpi/pci_link.c |   38 ++++++++++++++++++--------------------
 1 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -776,15 +776,25 @@ end:
 }
 
 static int
-irqrouter_suspend(
-       struct sys_device *dev,
-       u32     state)
+acpi_pci_link_resume(
+       struct acpi_pci_link *link)
+{
+       ACPI_FUNCTION_TRACE("acpi_pci_link_resume");
+
+       if (link->refcnt && 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)
 {
        struct list_head        *node = NULL;
        struct acpi_pci_link    *link = NULL;
-       int                     ret = 0;
 
-       ACPI_FUNCTION_TRACE("irqrouter_suspend");
+       ACPI_FUNCTION_TRACE("irqrouter_resume");
 
        list_for_each(node, &acpi_link.entries) {
                link = list_entry(node, struct acpi_pci_link, node);
@@ -793,21 +803,9 @@ irqrouter_suspend(
                                "Invalid link context\n"));
                        continue;
                }
-               if (link->irq.initialized && link->refcnt != 0
-                       /* We ignore legacy IDE device irq */
-                       && link->irq.active != 14 && link->irq.active !=15) {
-                       printk(KERN_WARNING PREFIX
-                               "%d drivers with interrupt %d neglected to call"
-                               " pci_disable_device at .suspend\n",
-                               link->refcnt,
-                               link->irq.active);
-                       printk(KERN_WARNING PREFIX
-                               "Fix the driver, or rmmod before suspend\n");
-                       link->refcnt = 0;
-                       ret = -EINVAL;
-               }
+               acpi_pci_link_resume(link);
        }
-       return_VALUE(ret);
+       return_VALUE(0);
 }
 
 
@@ -922,7 +920,7 @@ __setup("acpi_irq_balance", acpi_irq_bal
 /* FIXME: we will remove this interface after all drivers call 
pci_disable_device */
 static struct sysdev_class irqrouter_sysdev_class = {
         set_kset_name("irqrouter"),
-        .suspend = irqrouter_suspend,
+        .resume = irqrouter_resume,
 };
 
 
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to