Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa961ad9 authored by Chao Wang's avatar Chao Wang Committed by Greg Kroah-Hartman
Browse files

iommu/rockchip: Fix unwind goto issue



[ Upstream commit ec014683c564fb74fc68e8f5e84691d3b3839d24 ]

Smatch complains that
drivers/iommu/rockchip-iommu.c:1306 rk_iommu_probe() warn: missing unwind goto?

The rk_iommu_probe function, after obtaining the irq value through
platform_get_irq, directly returns an error if the returned value
is negative, without releasing any resources.

Fix this by adding a new error handling label "err_pm_disable" and
use a goto statement to redirect to the error handling process. In
order to preserve the original semantics, set err to the value of irq.

Fixes: 1aa55ca9 ("iommu/rockchip: Move irq request past pm_runtime_enable")
Signed-off-by: default avatarChao Wang <D202280639@hust.edu.cn>
Reviewed-by: default avatarDongliang Mu <dzm91@hust.edu.cn>
Reviewed-by: default avatarHeiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20230417030421.2777-1-D202280639@hust.edu.cn


Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 5abb81b4
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -1230,18 +1230,20 @@ static int rk_iommu_probe(struct platform_device *pdev)
	for (i = 0; i < iommu->num_irq; i++) {
		int irq = platform_get_irq(pdev, i);

		if (irq < 0)
			return irq;
		if (irq < 0) {
			err = irq;
			goto err_pm_disable;
		}

		err = devm_request_irq(iommu->dev, irq, rk_iommu_irq,
				       IRQF_SHARED, dev_name(dev), iommu);
		if (err) {
			pm_runtime_disable(dev);
			goto err_remove_sysfs;
		}
		if (err)
			goto err_pm_disable;
	}

	return 0;
err_pm_disable:
	pm_runtime_disable(dev);
err_remove_sysfs:
	iommu_device_sysfs_remove(&iommu->iommu);
err_put_group: