Message ID | 1440420167-8879-1-git-send-email-mpe@ellerman.id.au (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Mon, 2015-24-08 at 12:42:46 UTC, Michael Ellerman wrote: > From: "Guilherme G. Piccoli" <gpiccoli@linux.vnet.ibm.com> > > Commit 1851617cd2da ("PCI/MSI: Disable MSI at enumeration even if kernel > doesn't support MSI") changed the location of the code that initialises > dev->msi_cap/msix_cap and then disables MSI/MSI-X interrupts at PCI > probe time in devices that have this flag set. It moved the code from > pci_msi_init_pci_dev() to a new function named pci_msi_setup_pci_dev(), > called by pci_setup_device(). > > The pseries PCI probing code does not call pci_setup_device(), so since > the aforementioned commit the function pci_msi_setup_pci_dev() is not > called and MSI/MSI-X interrupts are left enabled. Additionally because > dev->msi_cap/msix_cap are not initialised no driver can ever enable > MSI/MSI-X. > > To fix this, the pseries PCI probe should manually call > pci_msi_setup_pci_dev(), so this patch makes it non-static. > > Fixes: 1851617cd2da ("PCI/MSI: Disable MSI at enumeration even if kernel doesn't support MSI") > [mpe: Update change log to mention dev->msi_cap/msix_cap] > Signed-off-by: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com> > Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Applied to powerpc fixes. https://git.kernel.org/powerpc/c/22b6839b914bbe5d94de11bb cheers -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index b978bbfe044c..f6ae0d0052eb 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1108,7 +1108,7 @@ int pci_cfg_space_size(struct pci_dev *dev) #define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED) -static void pci_msi_setup_pci_dev(struct pci_dev *dev) +void pci_msi_setup_pci_dev(struct pci_dev *dev) { /* * Disable the MSI hardware to avoid screaming interrupts diff --git a/include/linux/pci.h b/include/linux/pci.h index 8a0321a8fb59..860c751810fc 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1202,6 +1202,7 @@ struct msix_entry { u16 entry; /* driver uses to specify entry, OS writes */ }; +void pci_msi_setup_pci_dev(struct pci_dev *dev); #ifdef CONFIG_PCI_MSI int pci_msi_vec_count(struct pci_dev *dev);