From 583871d436bea48cc2204cee0ec8eb7025e03db6 Mon Sep 17 00:00:00 2001 From: Hidetoshi Seto Date: Thu, 6 Aug 2009 11:33:39 +0900 Subject: PCI MSI: Relocate error path in init_msix_capability() Move it from the middle of the function to the end. Reviewed-by: Matthew Wilcox Signed-off-by: Hidetoshi Seto Signed-off-by: Jesse Barnes --- drivers/pci/msi.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) (limited to 'drivers/pci/msi.c') diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index a7f2a01..7085d66 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -494,24 +494,8 @@ static int msix_capability_init(struct pci_dev *dev, } ret = arch_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX); - if (ret < 0) { - /* If we had some success report the number of irqs - * we succeeded in setting up. */ - int avail = 0; - list_for_each_entry(entry, &dev->msi_list, list) { - if (entry->irq != 0) { - avail++; - } - } - - if (avail != 0) - ret = avail; - } - - if (ret) { - free_msi_irqs(dev); - return ret; - } + if (ret) + goto error; /* * Some devices require MSI-X to be enabled before we can touch the @@ -540,6 +524,26 @@ static int msix_capability_init(struct pci_dev *dev, pci_write_config_word(dev, pos + PCI_MSIX_FLAGS, control); return 0; + +error: + if (ret < 0) { + /* + * If we had some success, report the number of irqs + * we succeeded in setting up. + */ + int avail = 0; + + list_for_each_entry(entry, &dev->msi_list, list) { + if (entry->irq != 0) + avail++; + } + if (avail != 0) + ret = avail; + } + + free_msi_irqs(dev); + + return ret; } /** -- cgit v1.1