Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a1e0baa authored by Bjorn Helgaas's avatar Bjorn Helgaas
Browse files

PCI/MSI: Don't set up INTx if MSI or MSI-X is enabled



If MSI or MSI-X is enabled, the device uses that.  It uses INTx only if
both MSI and MSI-X are disabled (see PCIe r4.0, sec 7.7.1.2), so if a
device already has MSI or MSI-X enabled, there's no need to set up its
legacy INTx interrupt.

bba6f6fc ("[PATCH] MSI-X: fix resume crash") changed the cris, frv,
x86, and ia64 arches to skip INTx setup when MSI is enabled.  The cris and
frv arches have since been removed.

16cf0ebc ("x86/PCI: Do not use interrupt links for devices using
MSI-X") extended that by changing x86 to also skip INTx setup when MSI-X is
enabled.

Change ia64 to skip INTx setup when either MSI or MSI-X is enabled by
applying the logic from 16cf0ebc to ia64 as well as x86.

Tested-by: default avatarTony Luck <tony.luck@intel.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
parent 7928b2cb
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -398,7 +398,7 @@ pcibios_enable_device (struct pci_dev *dev, int mask)
	if (ret < 0)
	if (ret < 0)
		return ret;
		return ret;


	if (!dev->msi_enabled)
	if (!pci_dev_msi_enabled(dev))
		return acpi_pci_irq_enable(dev);
		return acpi_pci_irq_enable(dev);
	return 0;
	return 0;
}
}
@@ -407,7 +407,7 @@ void
pcibios_disable_device (struct pci_dev *dev)
pcibios_disable_device (struct pci_dev *dev)
{
{
	BUG_ON(atomic_read(&dev->enable_cnt));
	BUG_ON(atomic_read(&dev->enable_cnt));
	if (!dev->msi_enabled)
	if (!pci_dev_msi_enabled(dev))
		acpi_pci_irq_disable(dev);
		acpi_pci_irq_disable(dev);
}
}