stmmac: dwmac-loongson: fix missing pci_disable_msi() while module exiting

pci_enable_msi() has been called in loongson_dwmac_probe(),
so pci_disable_msi() needs be called in remove path and error
path of probe().

Fixes: 30bba69d7d ("stmmac: pci: Add dwmac support for Loongson")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Yang Yingliang 2022-11-08 19:46:45 +08:00 committed by Paolo Abeni
parent c6092ea1e6
commit f2d45fdf9a

View file

@ -125,6 +125,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
if (res.irq < 0) { if (res.irq < 0) {
dev_err(&pdev->dev, "IRQ macirq not found\n"); dev_err(&pdev->dev, "IRQ macirq not found\n");
ret = -ENODEV; ret = -ENODEV;
goto err_disable_msi;
} }
res.wol_irq = of_irq_get_byname(np, "eth_wake_irq"); res.wol_irq = of_irq_get_byname(np, "eth_wake_irq");
@ -137,9 +138,18 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
if (res.lpi_irq < 0) { if (res.lpi_irq < 0) {
dev_err(&pdev->dev, "IRQ eth_lpi not found\n"); dev_err(&pdev->dev, "IRQ eth_lpi not found\n");
ret = -ENODEV; ret = -ENODEV;
goto err_disable_msi;
} }
return stmmac_dvr_probe(&pdev->dev, plat, &res); ret = stmmac_dvr_probe(&pdev->dev, plat, &res);
if (ret)
goto err_disable_msi;
return ret;
err_disable_msi:
pci_disable_msi(pdev);
return ret;
} }
static void loongson_dwmac_remove(struct pci_dev *pdev) static void loongson_dwmac_remove(struct pci_dev *pdev)
@ -155,6 +165,7 @@ static void loongson_dwmac_remove(struct pci_dev *pdev)
break; break;
} }
pci_disable_msi(pdev);
pci_disable_device(pdev); pci_disable_device(pdev);
} }