Commit f2d45fdf authored by Yang Yingliang's avatar Yang Yingliang Committed by Paolo Abeni
Browse files

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: 30bba69d ("stmmac: pci: Add dwmac support for Loongson")
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent c6092ea1
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
	if (res.irq < 0) {
		dev_err(&pdev->dev, "IRQ macirq not found\n");
		ret = -ENODEV;
		goto err_disable_msi;
	}

	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) {
		dev_err(&pdev->dev, "IRQ eth_lpi not found\n");
		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)
@@ -155,6 +165,7 @@ static void loongson_dwmac_remove(struct pci_dev *pdev)
		break;
	}

	pci_disable_msi(pdev);
	pci_disable_device(pdev);
}