Commit 7ab04b7c authored by Biju Das's avatar Biju Das Committed by Vinod Koul
Browse files

dmaengine: sh: rz-dmac: Improve cleanup order in probe()/remove()



We usually do cleanup in reverse order of init. Currently, in the
case of error, this is not followed in rz_dmac_probe(), and similar
case for remove().

This patch improves error handling in probe() and cleanup in
reverse order of init in the remove().

Reported-by: default avatarPavel Machek <pavel@denx.de>
Signed-off-by: default avatarBiju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: default avatarPavel Machek <pavel@denx.de>
Link: https://lore.kernel.org/r/20230706112150.198941-2-biju.das.jz@bp.renesas.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 06c2afb8
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -947,7 +947,6 @@ static int rz_dmac_probe(struct platform_device *pdev)
dma_register_err:
	of_dma_controller_free(pdev->dev.of_node);
err:
	reset_control_assert(dmac->rstc);
	channel_num = i ? i - 1 : 0;
	for (i = 0; i < channel_num; i++) {
		struct rz_dmac_chan *channel = &dmac->channels[i];
@@ -958,6 +957,7 @@ static int rz_dmac_probe(struct platform_device *pdev)
				  channel->lmdesc.base_dma);
	}

	reset_control_assert(dmac->rstc);
err_pm_runtime_put:
	pm_runtime_put(&pdev->dev);
err_pm_disable:
@@ -971,6 +971,8 @@ static int rz_dmac_remove(struct platform_device *pdev)
	struct rz_dmac *dmac = platform_get_drvdata(pdev);
	unsigned int i;

	dma_async_device_unregister(&dmac->engine);
	of_dma_controller_free(pdev->dev.of_node);
	for (i = 0; i < dmac->n_channels; i++) {
		struct rz_dmac_chan *channel = &dmac->channels[i];

@@ -979,8 +981,6 @@ static int rz_dmac_remove(struct platform_device *pdev)
				  channel->lmdesc.base,
				  channel->lmdesc.base_dma);
	}
	of_dma_controller_free(pdev->dev.of_node);
	dma_async_device_unregister(&dmac->engine);
	reset_control_assert(dmac->rstc);
	pm_runtime_put(&pdev->dev);
	pm_runtime_disable(&pdev->dev);