Function pci_disable_device() may be called for PCI devices during suspend/hibernation, which in turn may release IRQ assigned for PCI interrupt. Later when pci_enable_device() is called during resume, a different IRQ may be assigned and thus break the driver. So keep IRQ assignment for PCI devices during suspend/hibernation. We check pci_dev.dev.power.is_prepared to detect that pci_disable_device() and pci_enable_device() is called during suspend/hibernation. Signed-off-by: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx> --- Hi Borilav, Sorry for the incovenience, something is wrong when synchronizing the patch. I have found that "pm" should be "power" when building and testing this patch on my test machine. And I have also fixed it on my development machine, but forgot to do "stg refresh" before "git format-patch", so caused the inconvenience. Regards! Gerry --- arch/x86/pci/common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 059a76c29739..9115e7ae564b 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c @@ -662,14 +662,15 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) if ((err = pci_enable_resources(dev, mask)) < 0) return err; - if (!pci_dev_msi_enabled(dev)) + if (!pci_dev_msi_enabled(dev) && !dev->dev.power.is_prepared) return pcibios_enable_irq(dev); return 0; } void pcibios_disable_device (struct pci_dev *dev) { - if (!pci_dev_msi_enabled(dev) && pcibios_disable_irq) + if (!pci_dev_msi_enabled(dev) && pcibios_disable_irq && + !dev->dev.power.is_prepared) pcibios_disable_irq(dev); } -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html