From: Jay Fang <[email protected]>

[ Upstream commit 9599f341889c87e56bb944659c32490d05e2532f ]

Free previously allocated IRQs when return an error code of desc->setup()
which is not always successful. And simplify the code by adding a goto
label.

Fixes: 8f5c285f3ef5 ("SPI: designware: pci: Switch over to MSI interrupts")
CC: Felipe Balbi <[email protected]>
Signed-off-by: Jay Fang <[email protected]>
Link: 
https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
 drivers/spi/spi-dw-pci.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/spi/spi-dw-pci.c b/drivers/spi/spi-dw-pci.c
index 2ea73809ca345..271839a8add0e 100644
--- a/drivers/spi/spi-dw-pci.c
+++ b/drivers/spi/spi-dw-pci.c
@@ -127,18 +127,16 @@ static int spi_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *ent)
                if (desc->setup) {
                        ret = desc->setup(dws);
                        if (ret)
-                               return ret;
+                               goto err_free_irq_vectors;
                }
        } else {
-               pci_free_irq_vectors(pdev);
-               return -ENODEV;
+               ret = -ENODEV;
+               goto err_free_irq_vectors;
        }
 
        ret = dw_spi_add_host(&pdev->dev, dws);
-       if (ret) {
-               pci_free_irq_vectors(pdev);
-               return ret;
-       }
+       if (ret)
+               goto err_free_irq_vectors;
 
        /* PCI hook and SPI hook use the same drv data */
        pci_set_drvdata(pdev, dws);
@@ -152,6 +150,10 @@ static int spi_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *ent)
        pm_runtime_allow(&pdev->dev);
 
        return 0;
+
+err_free_irq_vectors:
+       pci_free_irq_vectors(pdev);
+       return ret;
 }
 
 static void spi_pci_remove(struct pci_dev *pdev)
-- 
2.25.1



Reply via email to