|
@@ -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;
|
|
|
+ }
|
|
|
}
|