diff options
author | Alexander Gordeev <agordeev@redhat.com> | 2013-12-16 03:34:56 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-12-20 11:45:05 -0500 |
commit | 2adc7907bac2c72535894732c4b41f9210f9e577 (patch) | |
tree | 7ee571f9836025ee4fa63e1df0de1d6795dd4fc6 | |
parent | 57b7cb024422bbe85366ef28f5e192997bd16943 (diff) |
PCI/MSI: Return msix_capability_init() failure if populate_msi_sysfs() fails
If populate_msi_sysfs() function failed msix_capability_init() must return
the error code, but it returns the success instead. This update fixes the
described misbehaviour.
Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Tejun Heo <tj@kernel.org>
-rw-r--r-- | drivers/pci/msi.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index f88fa1277802..a581381e02f2 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
@@ -749,7 +749,7 @@ static int msix_capability_init(struct pci_dev *dev, | |||
749 | 749 | ||
750 | ret = arch_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX); | 750 | ret = arch_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX); |
751 | if (ret) | 751 | if (ret) |
752 | goto error; | 752 | goto out_avail; |
753 | 753 | ||
754 | /* | 754 | /* |
755 | * Some devices require MSI-X to be enabled before we can touch the | 755 | * Some devices require MSI-X to be enabled before we can touch the |
@@ -762,10 +762,8 @@ static int msix_capability_init(struct pci_dev *dev, | |||
762 | msix_program_entries(dev, entries); | 762 | msix_program_entries(dev, entries); |
763 | 763 | ||
764 | ret = populate_msi_sysfs(dev); | 764 | ret = populate_msi_sysfs(dev); |
765 | if (ret) { | 765 | if (ret) |
766 | ret = 0; | 766 | goto out_free; |
767 | goto error; | ||
768 | } | ||
769 | 767 | ||
770 | /* Set MSI-X enabled bits and unmask the function */ | 768 | /* Set MSI-X enabled bits and unmask the function */ |
771 | pci_intx_for_msi(dev, 0); | 769 | pci_intx_for_msi(dev, 0); |
@@ -776,7 +774,7 @@ static int msix_capability_init(struct pci_dev *dev, | |||
776 | 774 | ||
777 | return 0; | 775 | return 0; |
778 | 776 | ||
779 | error: | 777 | out_avail: |
780 | if (ret < 0) { | 778 | if (ret < 0) { |
781 | /* | 779 | /* |
782 | * If we had some success, report the number of irqs | 780 | * If we had some success, report the number of irqs |
@@ -793,6 +791,7 @@ error: | |||
793 | ret = avail; | 791 | ret = avail; |
794 | } | 792 | } |
795 | 793 | ||
794 | out_free: | ||
796 | free_msi_irqs(dev); | 795 | free_msi_irqs(dev); |
797 | 796 | ||
798 | return ret; | 797 | return ret; |