On 2009-11-16 10:15, Konrad Rzeszutek Wilk wrote:
> On Mon, Nov 16, 2009 at 08:00:30PM +0800, Joe Jin wrote:
> > Hi,
> >
> > 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
>
> Where does that happen? That looks to be a driver bug as well.
We tried to reload qla2xxx driver, unload was worked, but installed the module
again, failed with ""Failed to reserve interrupt 22/23 already in use."
Have tried no-xen kernel and it worked fine, dig the codes found when unloaded
the driver, the driver always call pci_disable_msi() even driver call
pci_enable_msi() during driver initializing.
Compared xen pci_disable_msi() with no-xen pci_disable_msi() found it caused
by called msi_unmap_pirq(), at the function it set irq_desc[irq]->chip to
&no_irq_chip.
Then when tried to install the driver again via request_irq(), when call
setup_irq(), the function found the chip's value is no_irq_chip then return
-ENOSYS and failed to assign the irq to driver.
>
> > + if (!(dev->msi_enabled)) {
> > + printk(KERN_INFO "PCI: %s: Device did not eanble MSI.\n",
> ^^^^^- enable.
Thanks and regenerated the patch :)
Signed-off-by: Joe Jin <joe.jin@xxxxxxxxxx>
---
msi-xen.c | 6 ++++++
1 file changed, 6 insertions(+)
diff -r 6301ebc85480 drivers/pci/msi-xen.c
--- a/drivers/pci/msi-xen.c Fri Oct 23 10:07:22 2009 +0100
+++ b/drivers/pci/msi-xen.c Tue Nov 17 08:16:42 2009 +0800
@@ -673,6 +673,12 @@
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-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|