From: Andrew Morton Rajesh Shah wrote: > A driver that calls pci_enable_msi() while MSI is already enabled > will hit this BUG_ON. This is different from the behavior of > some other pci functions like pci_enable_device(), which > silently return success if the requested operation is a nop. > It's pretty easy to do the same here too (ditto for MSI-X). Cc: "Eric W. Biederman" Cc: Ingo Molnar Cc: Thomas Gleixner Cc: Benjamin Herrenschmidt Cc: Rajesh Shah Cc: Andi Kleen Cc: "Protasevich, Natalie" Cc: "Luck, Tony" Signed-off-by: Andrew Morton --- drivers/pci/msi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/pci/msi.c~genirq-msi-simplify-msi-enable-and-disable-fix drivers/pci/msi.c --- a/drivers/pci/msi.c~genirq-msi-simplify-msi-enable-and-disable-fix +++ a/drivers/pci/msi.c @@ -947,7 +947,7 @@ int pci_enable_msi(struct pci_dev* dev) if (!pos) return -EINVAL; - BUG_ON(!msi_lookup_vector(dev, PCI_CAP_ID_MSI)); + WARN_ON(!msi_lookup_vector(dev, PCI_CAP_ID_MSI)); /* Check whether driver already requested for MSI-X vectors */ pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); @@ -1106,7 +1106,7 @@ int pci_enable_msix(struct pci_dev* dev, } } temp = dev->irq; - BUG_ON(!msi_lookup_vector(dev, PCI_CAP_ID_MSIX)); + WARN_ON(!msi_lookup_vector(dev, PCI_CAP_ID_MSIX)); /* Check whether driver already requested for MSI vector */ if (pci_find_capability(dev, PCI_CAP_ID_MSI) > 0 && _