Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / drivers / acpi / pci_irq.c
index 7cc4e33..5277a0e 100644 (file)
@@ -413,6 +413,9 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
                return 0;
        }
 
+       if (dev->irq_managed && dev->irq > 0)
+               return 0;
+
        entry = acpi_pci_irq_lookup(dev, pin);
        if (!entry) {
                /*
@@ -456,6 +459,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
                return rc;
        }
        dev->irq = rc;
+       dev->irq_managed = 1;
 
        if (link)
                snprintf(link_desc, sizeof(link_desc), " -> Link[%s]", link);
@@ -478,7 +482,7 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
        u8 pin;
 
        pin = dev->pin;
-       if (!pin)
+       if (!pin || !dev->irq_managed || dev->irq <= 0)
                return;
 
        /* Keep IOAPIC pin configuration when suspending */
@@ -506,6 +510,9 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
         */
 
        dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin));
-       if (gsi >= 0 && dev->irq > 0)
+       if (gsi >= 0) {
                acpi_unregister_gsi(gsi);
+               dev->irq = 0;
+               dev->irq_managed = 0;
+       }
 }