提交 16cf0ebc 编写于 作者: R Rafael J. Wysocki 提交者: Jesse Barnes

x86/PCI: Do not use interrupt links for devices using MSI-X

pcibios_enable_device() and pcibios_disable_device() don't handle
IRQs for devices that have MSI enabled and it should treat the
devices with MSI-X enabled in the same way.
Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
Acked-by: NIngo Molnar <mingo@elte.hu>
Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
上级 ef1bba28
...@@ -551,14 +551,14 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) ...@@ -551,14 +551,14 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
if ((err = pci_enable_resources(dev, mask)) < 0) if ((err = pci_enable_resources(dev, mask)) < 0)
return err; return err;
if (!dev->msi_enabled) if (!pci_dev_msi_enabled(dev))
return pcibios_enable_irq(dev); return pcibios_enable_irq(dev);
return 0; return 0;
} }
void pcibios_disable_device (struct pci_dev *dev) void pcibios_disable_device (struct pci_dev *dev)
{ {
if (!dev->msi_enabled && pcibios_disable_irq) if (!pci_dev_msi_enabled(dev) && pcibios_disable_irq)
pcibios_disable_irq(dev); pcibios_disable_irq(dev);
} }
......
...@@ -336,6 +336,15 @@ struct pci_bus { ...@@ -336,6 +336,15 @@ struct pci_bus {
#define pci_bus_b(n) list_entry(n, struct pci_bus, node) #define pci_bus_b(n) list_entry(n, struct pci_bus, node)
#define to_pci_bus(n) container_of(n, struct pci_bus, dev) #define to_pci_bus(n) container_of(n, struct pci_bus, dev)
#ifdef CONFIG_PCI_MSI
static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
{
return pci_dev->msi_enabled || pci_dev->msix_enabled;
}
#else
static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
#endif
/* /*
* Error values that may be returned by PCI functions. * Error values that may be returned by PCI functions.
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册