• Bjorn Helgaas's avatar
    PCI: Enable INTx in pci_reenable_device() only when MSI/MSI-X not enabled · 3cdeb713
    Bjorn Helgaas authored
    Andreas reported that after 1f42db78 ("PCI: Enable INTx if BIOS left
    them disabled"), pciehp surprise removal stopped working.
    
    This happens because pci_reenable_device() on the hotplug bridge (used in
    the pciehp_configure_device() path) clears the Interrupt Disable bit, which
    apparently breaks the bridge's MSI hotplug event reporting.
    
    Previously we cleared the Interrupt Disable bit in do_pci_enable_device(),
    which is used by both pci_enable_device() and pci_reenable_device().  But
    we use pci_reenable_device() after the driver may have enabled MSI or
    MSI-X, and we *set* Interrupt Disable as part of enabling MSI/MSI-X.
    
    This patch clears Interrupt Disable only when MSI/MSI-X has not been
    enabled.
    
    Fixes: 1f42db78 PCI: Enable INTx if BIOS left them disabled
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=71691Reported-and-tested-by: default avatarAndreas Noever <andreas.noever@gmail.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    CC: stable@vger.kernel.org
    CC: Sarah Sharp <sarah.a.sharp@linux.intel.com>
    3cdeb713
pci.c 114 KB