Re: [PATCH] fix: PCI: dra7xx: dra7xx_pcie_probe: fix missing device_link_del on phy error paths

From: WenTao Liang

Date: Sun Jun 28 2026 - 00:02:11 EST




> 2026年6月26日 23:48,WenTao Liang <vulab@xxxxxxxxxxx> 写道:
>
> In dra7xx_pcie_probe(), when devm_phy_get() fails for a later phy device
> (i > 0), the function directly returns PTR_ERR(phy[i]) without calling
> device_link_del() on previously added device links. Similarly, when
> dra7xx_pcie_enable_phy() fails, all phy_count device links are leaked as
> the function returns directly without cleanup.
>
> Change the error paths to jump to the existing err_link label which
> properly iterates through link[0..i) and calls device_link_del() for
> each.
>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: WenTao Liang <vulab@xxxxxxxxxxx>
> ---
> drivers/pci/controller/dwc/pci-dra7xx.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
> index cd904659c321..153ee6f7dbfc 100644
> --- a/drivers/pci/controller/dwc/pci-dra7xx.c
> +++ b/drivers/pci/controller/dwc/pci-dra7xx.c
> @@ -743,8 +743,10 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> for (i = 0; i < phy_count; i++) {
> snprintf(name, sizeof(name), "pcie-phy%d", i);
> phy[i] = devm_phy_get(dev, name);
> - if (IS_ERR(phy[i]))
> - return PTR_ERR(phy[i]);
> + if (IS_ERR(phy[i])) {
> + ret = PTR_ERR(phy[i]);
> + goto err_link;
> + }
>
> link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
> if (!link[i]) {
> @@ -767,7 +769,8 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> ret = dra7xx_pcie_enable_phy(dra7xx);
> if (ret) {
> dev_err(dev, "failed to enable phy\n");
> - return ret;
> + dra7xx_pcie_disable_phy(dra7xx);
> + goto err_link;
> }
>
> platform_set_drvdata(pdev, dra7xx);
> @@ -910,7 +913,8 @@ static int dra7xx_pcie_resume_noirq(struct device *dev)
> ret = dra7xx_pcie_enable_phy(dra7xx);
> if (ret) {
> dev_err(dev, "failed to enable phy\n");
> - return ret;
> + dra7xx_pcie_disable_phy(dra7xx);
> + goto err_link;
> }
>
> return 0;
> --
> 2.39.5 (Apple Git-154)

Please ignore this patch. I will resend a proper version after
learning the kernel submission process.

Apologies for the noise.

Best regards,
WenTao Liang