[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] xen: Dont call msi_unmap_pirq() if did not enable msi
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1259073919 0 # Node ID 7bae5a000157a222200337d24eafd5a00f87ca57 # Parent 1db1bb63824b25f97d127449faeb3a56f1272c97 xen: Dont call msi_unmap_pirq() if did not enable msi When device driver unload, it may call pci_disable_msi(), if msi did not enabled but do msi_unmap_pirq(), then later driver reload and without msi, then will failed in request_irq() for irq_desc[irq]->chip valie is no_irq_chip. So when did not enable msi during driver initializing, then unloaded driver will not try to disable it. How to reproduce it: At the server with QLogic 25xx, try to reload qla2xxx will hit it. Signed-off-by: Joe Jin <joe.jin@xxxxxxxxxx> --- drivers/pci/msi-xen.c | 13 +++++++++++++ 1 files changed, 13 insertions(+) diff -r 1db1bb63824b -r 7bae5a000157 drivers/pci/msi-xen.c --- a/drivers/pci/msi-xen.c Mon Nov 23 07:32:47 2009 +0000 +++ b/drivers/pci/msi-xen.c Tue Nov 24 14:45:19 2009 +0000 @@ -618,6 +618,7 @@ int pci_enable_msi(struct pci_dev* dev) return ret; dev->irq = evtchn_map_pirq(-1, dev->irq); + dev->msi_enabled = 1; msi_dev_entry->default_irq = temp; return ret; @@ -662,9 +663,15 @@ void pci_disable_msi(struct pci_dev* dev #ifdef CONFIG_XEN_PCIDEV_FRONTEND if (!is_initial_xendomain()) { + if (!(dev->msi_enabled)) { + printk(KERN_INFO "PCI: %s: Device did not enabled MSI.\n", + pci_name(dev)); + return; + } evtchn_map_pirq(dev->irq, 0); pci_frontend_disable_msi(dev); dev->irq = msi_dev_entry->default_irq; + dev->msi_enabled = 0; return; } #endif @@ -673,6 +680,12 @@ void pci_disable_msi(struct pci_dev* dev if (!pos) return; + if (!(dev->msi_enabled)) { + printk(KERN_INFO "PCI: %s: Device did not enabled MSI.\n", + pci_name(dev)); + return; + } + pirq = dev->irq; /* Restore dev->irq to its default pin-assertion vector */ dev->irq = msi_dev_entry->default_irq; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |