Message ID | 1344589722-8772-1-git-send-email-guohanjun@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Fri, Aug 10, 2012 at 2:08 AM, Hanjun Guo <guohanjun@huawei.com> wrote: > when probe a pci device, first we enable it, and disable it when > some error happened in the following process, because the power > state of the device is set to D0, and if MSI is disabled, > we will allocate irq and register gsi for this device in the enable process. > > In function mpt_mapresources(MPT_ADAPTER *ioc), it forgot disable the > pci device when error happened, the irq and gsi will never be released. > this patch will fix it. > > Signed-off-by: Hanjun Guo <guohanjun@huawei.com> > Signed-off-by: Jiang Liu <jiang.liu@huawei.com> > --- > drivers/message/fusion/mptbase.c | 18 +++++++++++------- > 1 files changed, 11 insertions(+), 7 deletions(-) You may need to send to LSI and scsi list. You need to use ./scripts/get_maintainer.pl to find out right CC list. Thanks Yinghai -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2012/8/11 0:32, Yinghai Lu wrote: > On Fri, Aug 10, 2012 at 2:08 AM, Hanjun Guo <guohanjun@huawei.com> wrote: >> when probe a pci device, first we enable it, and disable it when >> some error happened in the following process, because the power >> state of the device is set to D0, and if MSI is disabled, >> we will allocate irq and register gsi for this device in the enable process. >> >> In function mpt_mapresources(MPT_ADAPTER *ioc), it forgot disable the >> pci device when error happened, the irq and gsi will never be released. >> this patch will fix it. >> >> Signed-off-by: Hanjun Guo <guohanjun@huawei.com> >> Signed-off-by: Jiang Liu <jiang.liu@huawei.com> >> --- >> drivers/message/fusion/mptbase.c | 18 +++++++++++------- >> 1 files changed, 11 insertions(+), 7 deletions(-) > > You may need to send to LSI and scsi list. > > You need to use ./scripts/get_maintainer.pl to find out right CC list. > > Thanks > > Yinghai Hi Yinghai, Thanks for your help, I really appreciate it. I will resend this patch with the right CC list. Thanks, Hanjun Guo -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index d99db56..fb69baa 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c @@ -1666,7 +1666,7 @@ mpt_mapresources(MPT_ADAPTER *ioc) if (pci_request_selected_regions(pdev, ioc->bars, "mpt")) { printk(MYIOC_s_ERR_FMT "pci_request_selected_regions() with " "MEM failed\n", ioc->name); - return r; + goto out_pci_disable_device; } if (sizeof(dma_addr_t) > 4) { @@ -1690,8 +1690,7 @@ mpt_mapresources(MPT_ADAPTER *ioc) } else { printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n", ioc->name, pci_name(pdev)); - pci_release_selected_regions(pdev, ioc->bars); - return r; + goto out_pci_release_region; } } else { if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) @@ -1704,8 +1703,7 @@ mpt_mapresources(MPT_ADAPTER *ioc) } else { printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n", ioc->name, pci_name(pdev)); - pci_release_selected_regions(pdev, ioc->bars); - return r; + goto out_pci_release_region; } } @@ -1735,8 +1733,8 @@ mpt_mapresources(MPT_ADAPTER *ioc) if (mem == NULL) { printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map adapter" " memory!\n", ioc->name); - pci_release_selected_regions(pdev, ioc->bars); - return -EINVAL; + r = -EINVAL; + goto out_pci_release_region; } ioc->memmap = mem; dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem = %p, mem_phys = %llx\n", @@ -1750,6 +1748,12 @@ mpt_mapresources(MPT_ADAPTER *ioc) ioc->pio_chip = (SYSIF_REGS __iomem *)port; return 0; + +out_pci_release_region: + pci_release_selected_regions(pdev, ioc->bars); +out_pci_disable_device: + pci_disable_device(pdev); + return r; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/