These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / acpi / pci_irq.c
index b1def41..c933675 100644 (file)
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  *  General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- *
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  */
 
@@ -44,7 +40,6 @@
 ACPI_MODULE_NAME("pci_irq");
 
 struct acpi_prt_entry {
-       struct list_head        list;
        struct acpi_pci_id      id;
        u8                      pin;
        acpi_handle             link;
@@ -163,7 +158,7 @@ static int acpi_pci_irq_check_entry(acpi_handle handle, struct pci_dev *dev,
 {
        int segment = pci_domain_nr(dev->bus);
        int bus = dev->bus->number;
-       int device = PCI_SLOT(dev->devfn);
+       int device = pci_ari_enabled(dev->bus) ? 0 : PCI_SLOT(dev->devfn);
        struct acpi_prt_entry *entry;
 
        if (((prt->address >> 16) & 0xffff) != device ||
@@ -377,6 +372,7 @@ static int acpi_isa_register_gsi(struct pci_dev *dev)
 
        /* Interrupt Line values above 0xF are forbidden */
        if (dev->irq > 0 && (dev->irq <= 0xF) &&
+           acpi_isa_irq_available(dev->irq) &&
            (acpi_isa_irq_to_gsi(dev->irq, &dev_gsi) == 0)) {
                dev_warn(&dev->dev, "PCI INT %c: no GSI - using ISA IRQ %d\n",
                         pin_name(dev->pin), dev->irq);
@@ -413,7 +409,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
                return 0;
        }
 
-       if (dev->irq_managed && dev->irq > 0)
+       if (pci_has_managed_irq(dev))
                return 0;
 
        entry = acpi_pci_irq_lookup(dev, pin);
@@ -458,8 +454,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
                kfree(entry);
                return rc;
        }
-       dev->irq = rc;
-       dev->irq_managed = 1;
+       pci_set_managed_irq(dev, rc);
 
        if (link)
                snprintf(link_desc, sizeof(link_desc), " -> Link[%s]", link);
@@ -482,16 +477,8 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
        u8 pin;
 
        pin = dev->pin;
-       if (!pin || !dev->irq_managed || dev->irq <= 0)
-               return;
-
-       /* Keep IOAPIC pin configuration when suspending */
-       if (dev->dev.power.is_prepared)
+       if (!pin || !pci_has_managed_irq(dev))
                return;
-#ifdef CONFIG_PM
-       if (dev->dev.power.runtime_status == RPM_SUSPENDING)
-               return;
-#endif
 
        entry = acpi_pci_irq_lookup(dev, pin);
        if (!entry)
@@ -512,6 +499,6 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
        dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin));
        if (gsi >= 0) {
                acpi_unregister_gsi(gsi);
-               dev->irq_managed = 0;
+               pci_reset_managed_irq(dev);
        }
 }