From patchwork Thu Aug 25 10:08:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe JAILLET X-Patchwork-Id: 12954465 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00E36C3F6B0 for ; Thu, 25 Aug 2022 10:08:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240650AbiHYKIc (ORCPT ); Thu, 25 Aug 2022 06:08:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52174 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239593AbiHYKIa (ORCPT ); Thu, 25 Aug 2022 06:08:30 -0400 Received: from smtp.smtpout.orange.fr (smtp05.smtpout.orange.fr [80.12.242.127]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 029D7ABD42 for ; Thu, 25 Aug 2022 03:08:28 -0700 (PDT) Received: from pop-os.home ([90.11.190.129]) by smtp.orange.fr with ESMTPA id R9mjo8BOznj75R9mkodWvg; Thu, 25 Aug 2022 12:08:26 +0200 X-ME-Helo: pop-os.home X-ME-Auth: Y2hyaXN0b3BoZS5qYWlsbGV0QHdhbmFkb28uZnI= X-ME-Date: Thu, 25 Aug 2022 12:08:26 +0200 X-ME-IP: 90.11.190.129 From: Christophe JAILLET To: Michael Turquette , Stephen Boyd , Mike Turquette , Gabriel FERNANDEZ , Pankaj Dev Cc: linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org, Christophe JAILLET , linux-clk@vger.kernel.org Subject: [PATCH] clk: st: Fix some error handling path in st_of_quadfs_setup() Date: Thu, 25 Aug 2022 12:08:24 +0200 Message-Id: X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org If an error occurs, some resources still need to be released. Add the corresponding error handing path. Fixes: 5f7aa9071e93 ("clk: st: Support for QUADFS inside ClockGenB/C/D/E/F") Signed-off-by: Christophe JAILLET --- This patch is NOT compile tested. I don't have the needed build tool chain. --- drivers/clk/st/clkgen-fsyn.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/clk/st/clkgen-fsyn.c b/drivers/clk/st/clkgen-fsyn.c index d820292a381d..d1b3a4162682 100644 --- a/drivers/clk/st/clkgen-fsyn.c +++ b/drivers/clk/st/clkgen-fsyn.c @@ -984,7 +984,7 @@ static void __init st_of_quadfs_setup(struct device_node *np, struct clkgen_quadfs_data_clks *datac) { struct clk *clk; - const char *pll_name, *clk_parent_name; + const char *pll_name = NULL, *clk_parent_name; void __iomem *reg; spinlock_t *lock; struct device_node *parent_np; @@ -1006,32 +1006,38 @@ static void __init st_of_quadfs_setup(struct device_node *np, clk_parent_name = of_clk_get_parent_name(np, 0); if (!clk_parent_name) - return; + goto err_unmap; pll_name = kasprintf(GFP_KERNEL, "%pOFn.pll", np); if (!pll_name) - return; + goto err_unmap; lock = kzalloc(sizeof(*lock), GFP_KERNEL); if (!lock) - goto err_exit; + goto err_unmap; spin_lock_init(lock); clk = st_clk_register_quadfs_pll(pll_name, clk_parent_name, datac->data, reg, lock); if (IS_ERR(clk)) - goto err_exit; - else - pr_debug("%s: parent %s rate %u\n", - __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - (unsigned int)clk_get_rate(clk)); + goto err_free_lock; + + pr_debug("%s: parent %s rate %u\n", + __clk_get_name(clk), __clk_get_name(clk_get_parent(clk)), + (unsigned int)clk_get_rate(clk)); st_of_create_quadfs_fsynths(np, pll_name, datac, reg, lock); -err_exit: +out: kfree(pll_name); /* No longer need local copy of the PLL name */ + return; + +err_free_lock: + kfree(lock); +err_unmap: + iounmap(reg); + goto out; } static void __init st_of_quadfs660C_setup(struct device_node *np)