PCI MSI: Relocate error path in init_msix_capability()
authorHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Thu, 6 Aug 2009 02:33:39 +0000 (11:33 +0900)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Wed, 9 Sep 2009 20:29:32 +0000 (13:29 -0700)
Move it from the middle of the function to the end.

Reviewed-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/msi.c

index a7f2a014046b4193f2921b6dc71ee40b9708f1d9..7085d665db0123cc5ff61801ac896bbf9018a863 100644 (file)
@@ -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;
 }
 
 /**