ARM: Orion: fix driver probe error handling with respect to clk
Subsystems (11)
PATCH 1/1 ARM: Orion: fix driver probe error handling with respect to clk
The clk patches added code to get and enable clocks in the respective driver probe functions. If the probe function failed for some reason after enabling the clock, the clock was not disabled again in many cases.
---
Hi,
some hopefully obvious fixes to driver probe cleanup code. Patch is based on v3.5-rc7. Let me know if you prefer a series of per driver patches instead.
- Simon
drivers/crypto/mv_cesa.c | 4 ++++ drivers/mmc/host/mvsdio.c | 4 ++++ drivers/mtd/nand/orion_nand.c | 4 ++++ drivers/net/ethernet/marvell/mv643xx_eth.c | 4 ++++ drivers/usb/host/ehci-orion.c | 4 ++++ sound/soc/kirkwood/kirkwood-i2s.c | 8 +++++++- 6 files changed, 27 insertions(+), 1 deletion(-)
drivers/crypto/mv_cesa.c +4 -0
@@ -1098,6 +1098,10 @@ err_unreg_ecb:crypto_unregister_alg (&mv_aes_alg_ecb); err_irq:free_irq (irq, cp); +if (!IS_ERR (cp->clk)) { +clk_disable_unprepare (cp->clk); +clk_put (cp->clk); + } err_thread:kthread_stop (cp->queue_th); err_unmap_sram:
drivers/mmc/host/mvsdio.c +4 -0
@@ -839,6 +839,10 @@ out:if (r)release_resource (r);if (mmc) +if (!IS_ERR_OR_NULL (host->clk)) { +clk_disable_unprepare (host->clk); +clk_put (host->clk); + }mmc_free_host (mmc);return ret;
drivers/mtd/nand/orion_nand.c +4 -0
@@ -183,6 +183,10 @@ static int __init orion_nand_probe(struct platform_device *pdev)return 0 ; no_dev: +if (!IS_ERR (clk)) { +clk_disable_unprepare (clk); +clk_put (clk); + }platform_set_drvdata (pdev,NULL );iounmap (io_base); no_res:
drivers/net/ethernet/marvell/mv643xx_eth.c +4 -0
@@ -2983,6 +2983,10 @@ static int mv643xx_eth_probe(struct platform_device *pdev)return 0 ; out: +if (!IS_ERR (mp->clk)) { +clk_disable_unprepare (mp->clk); +clk_put (mp->clk); + }free_netdev (dev);return err;
drivers/usb/host/ehci-orion.c +4 -0
@@ -298,6 +298,10 @@ static int __devinit ehci_orion_drv_probe(struct platform_device *pdev) err4:usb_put_hcd (hcd); err3: +if (!IS_ERR (clk)) { +clk_disable_unprepare (clk); +clk_put (clk); + }iounmap (regs); err2:release_mem_region (res->start,resource_size (res));
sound/soc/kirkwood/kirkwood-i2s.c +7 -1
@@ -458,7 +458,13 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev) }clk_prepare_enable (priv->clk); -return snd_soc_register_dai (&pdev->dev, &kirkwood_i2s_dai); + err =snd_soc_register_dai (&pdev->dev, &kirkwood_i2s_dai); +if (!err) +return 0 ; +dev_err (&pdev->dev,"snd_soc_register_dai failed\n" ); + +clk_disable_unprepare (priv->clk); +clk_put (priv->clk); err_ioremap:iounmap (priv->io);
Signature · 1 line
1.7.9.5
PATCH 1/1 ARM: Orion: fix driver probe error handling with respect to clk
Quoted 6 lines · Simon Baatz
The clk patches added code to get and enable clocks in the respective driver probe functions. If the probe function failed for some reason after enabling the clock, the clock was not disabled again in many cases.
Signed-off-by Simon Baatz <[email protected]>
Hi Simon
Looks mostly good. I can pull this into my collection of orion patches.
Quoted 5 lines
drivers/net/ethernet/marvell/mv643xx_eth.c +0
-0
drivers/net/ethernet/marvell/mv643xx_eth.c static int mv643xx_eth_probe(struct platform_device *pdev) · line 2992
Quoted 10 lines
drivers/net/ethernet/marvell/mv643xx_eth.c +4
-0@@ -2983,6 +2983,10 @@ static int mv643xx_eth_probe(struct platform_device *pdev)return 0 ; out: +if (!IS_ERR (mp->clk)) { +clk_disable_unprepare (mp->clk); +clk_put (mp->clk); + }free_netdev (dev);return err;
The ethernet driver is build on platforms which don't have clk support. So this needs to be inside
#if defined(CONFIG_HAVE_CLK)
#endif
I will add this.
Andrew