[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] [PATCH] Dont call msi_unmap_pirq() if did not enabled msi



Got it. Thanks.

--jyh

Joe Jin wrote:
> On 2009-11-24 14:12, Jiang, Yunhong wrote:
>> Joe, thanks for your patch very much.
>> A small question is, can we check if (!(dev->msi_enabled))
> only once in pci_disable_msi()?
> 
> Check once is OK, twice check made codes easy to understand(compare
> pci_enable_msi()), and will not impact program's flow :)
> 
> Thanks,
> Joe
> 
>> 
>> --jyh
>> 
>> Joe Jin wrote:
>>> Sorry I lost to set @dev->msi_enabled to false in pci_disable_msi,
>>> here are the patch, please review and comment:
>>> 
>>> 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>
>>> ---
>>> msi-xen.c |   13 +++++++++++++
>>> 1 file changed, 13 insertions(+)
>>> 
>>> 
>>> diff -r c5c40e80bd7d drivers/pci/msi-xen.c
>>> --- a/drivers/pci/msi-xen.c Fri Nov 13 22:01:54 2009 +0000
>>> +++ b/drivers/pci/msi-xen.c Tue Nov 24 09:56:52 2009 +0800 @@
>>> -618,6                      +618,7 @@ 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 @@
>>> 
>>> #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 @@
>>>     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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.