mt76: mt7615: free pci_vector if mt7615_pci_probe fails
authorLorenzo Bianconi <lorenzo@kernel.org>
Thu, 30 Apr 2020 20:31:03 +0000 (22:31 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 12 May 2020 17:52:34 +0000 (19:52 +0200)
Always free pci irq vector if mt7615_pci_probe routine fails
Moreover free irq in mt7615_pci_remove routine

Co-developed-by: Soul Huang <sean.wang@mediatek.com>
Signed-off-by: Soul Huang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/pci.c

index f9469198cabd092fbdd4b37a404cefcbf0bf0e1e..0605c908059e56d789b823a8af9758628c52b694 100644 (file)
@@ -39,13 +39,21 @@ static int mt7615_pci_probe(struct pci_dev *pdev,
 
        ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
        if (ret)
-               return ret;
+               goto error;
 
        mt76_pci_disable_aspm(pdev);
 
        map = id->device == 0x7663 ? mt7663e_reg_map : mt7615e_reg_map;
-       return mt7615_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0],
-                                pdev->irq, map);
+       ret = mt7615_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0],
+                               pdev->irq, map);
+       if (ret)
+               goto error;
+
+       return 0;
+error:
+       pci_free_irq_vectors(pdev);
+
+       return ret;
 }
 
 static void mt7615_pci_remove(struct pci_dev *pdev)
@@ -54,6 +62,7 @@ static void mt7615_pci_remove(struct pci_dev *pdev)
        struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
 
        mt7615_unregister_device(dev);
+       devm_free_irq(&pdev->dev, pdev->irq, dev);
        pci_free_irq_vectors(pdev);
 }