dma: mv_xor: fix error handling for clocks
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 6 Jan 2013 10:10:44 +0000 (11:10 +0100)
committerJason Cooper <jason@lakedaemon.net>
Sun, 6 Jan 2013 17:53:28 +0000 (17:53 +0000)
When a channel fails to initialize, we release all ressources,
including clocks. However, a XOR unit is not necessarily associated to
a clock (some variants of Marvell SoCs have a clock for XOR units,
some don't), so we shouldn't unconditionally be releasing the clock.

Instead, just like we do in the mv_xor_remove() function, we should
check if one clock was found before releasing it.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
drivers/dma/mv_xor.c

index cc5d23d3addd37a6000973c37a0e7e5bea5d4e0c..e17fad03cb804b7d538bd2928923a50928475d4f 100644 (file)
@@ -1366,8 +1366,11 @@ err_channel_add:
                                irq_dispose_mapping(xordev->channels[i]->irq);
                }
 
-       clk_disable_unprepare(xordev->clk);
-       clk_put(xordev->clk);
+       if (!IS_ERR(xordev->clk)) {
+               clk_disable_unprepare(xordev->clk);
+               clk_put(xordev->clk);
+       }
+
        return ret;
 }