Hi, This patch suggests a fix for the MSI/MSI-X load failure. Please review the patch.
Symptoms: When a driver is loaded with MSI followed by MSI-X, the load fails indicating that the MSI vector is still active. And vice versa. Suspected rootcause: This happens inspite of driver calling free_irq() followed by pci_disable_msi/pci_disable_msix. This appears to be a kernel bug wherein the pci_disable_msi and pci_disable_msix calls do not clear/unpopulate the msi_desc data structure that was populated by pci_enable_msi/pci_enable_msix. Proposed fix: Free the MSI vector in pci_disable_msi and all allocated MSI-X vectors in pci_disable_msix. Testing: The fix has been tested on IA64 platforms with Neterion's Xframe driver. Signed-off-by: Ravinandan Arakali <[EMAIL PROTECTED]> --- diff -urpN old/drivers/pci/msi.c new/drivers/pci/msi.c --- old/drivers/pci/msi.c 2006-05-31 19:02:19.000000000 -0700 +++ new/drivers/pci/msi.c 2006-05-31 19:02:39.000000000 -0700 @@ -779,6 +779,7 @@ void pci_disable_msi(struct pci_dev* dev nr_released_vectors++; default_vector = entry->msi_attrib.default_vector; spin_unlock_irqrestore(&msi_lock, flags); + msi_free_vector(dev, dev->irq, 1); /* Restore dev->irq to its default pin-assertion vector */ dev->irq = default_vector; disable_msi_mode(dev, pci_find_capability(dev, PCI_CAP_ID_MSI), @@ -1046,6 +1047,7 @@ void pci_disable_msix(struct pci_dev* de } } + msi_remove_pci_irq_vectors(dev); } /** - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html