Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

video: fbdev: pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove()

In pxa3xx_gcu_probe(), the sequence of error lable is wrong, it will
leads some resource leaked, so adjust the sequence to handle the error
correctly, and if pxa3xx_gcu_add_buffer() fails, pxa3xx_gcu_free_buffers()
need be called.
In pxa3xx_gcu_remove(), add missing clk_disable_unpreprare().

Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: Helge Deller <deller@gmx.de>

authored by

Yang Yingliang and committed by
Helge Deller
d87ad457 40189b73

+7 -5
+7 -5
drivers/video/fbdev/pxa3xx-gcu.c
··· 646 646 for (i = 0; i < 8; i++) { 647 647 ret = pxa3xx_gcu_add_buffer(dev, priv); 648 648 if (ret) { 649 + pxa3xx_gcu_free_buffers(dev, priv); 649 650 dev_err(dev, "failed to allocate DMA memory\n"); 650 651 goto err_disable_clk; 651 652 } ··· 663 662 SHARED_SIZE, irq); 664 663 return 0; 665 664 666 - err_free_dma: 667 - dma_free_coherent(dev, SHARED_SIZE, 668 - priv->shared, priv->shared_phys); 665 + err_disable_clk: 666 + clk_disable_unprepare(priv->clk); 669 667 670 668 err_misc_deregister: 671 669 misc_deregister(&priv->misc_dev); 672 670 673 - err_disable_clk: 674 - clk_disable_unprepare(priv->clk); 671 + err_free_dma: 672 + dma_free_coherent(dev, SHARED_SIZE, 673 + priv->shared, priv->shared_phys); 675 674 676 675 return ret; 677 676 } ··· 684 683 pxa3xx_gcu_wait_idle(priv); 685 684 misc_deregister(&priv->misc_dev); 686 685 dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys); 686 + clk_disable_unprepare(priv->clk); 687 687 pxa3xx_gcu_free_buffers(dev, priv); 688 688 689 689 return 0;