From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0EC90C433EF for ; Tue, 8 Feb 2022 12:57:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Q3N2NV/sR3qWHyBnH7c//pxILoH/a/Yo4R8TIRV7GKE=; b=jGyJX9s8ztIJsu x5/jb3vsoVOMDwNBEnRUL0edPu7SXE/RdOpfW/aFXLyybhw0rorMslY6ugZ6eiuan/GiAhtPcFm1u kz/dpcGSzXVjIK+jyDab6aK/p89yLjVOk1sx6ue1okwMWqMyxEv8JyirewqyFYgB5C/NAtcV+qill WnnRujUvtnXy7g6yJu2oT1M4Qh9kIWzKGaTez0rwOnv/RESX9tU2rA467pNqdcS3gtqdyHIfkI1wk q/7VtLp8elDm2q9DOlQiwnoxWa/Vc4uzCqcP9ZE1HE9SIQODADzKNPMgKksJuXXgPtXoJdBwf1ft7 4m5ebjHlIbibRharc/Mw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHQ1K-00DtnU-EY; Tue, 08 Feb 2022 12:54:58 +0000 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHPoN-00Dnbw-2F for linux-arm-kernel@lists.infradead.org; Tue, 08 Feb 2022 12:41:36 +0000 Received: by mail-pj1-x1032.google.com with SMTP id qe15so6634085pjb.3 for ; Tue, 08 Feb 2022 04:41:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=haCUKocersM2g//bqn162Qgjk6DgHWiyvTJMF5LIhWw=; b=M5jgrIfhxC3Ll3awR5T/EnAv44rvXW+k+Lm7AQnR3Voo/+J434lWom64lKJIfHW/cl bbJ4/NkcAMG7j9u2VNGPeha843F9tsH16GYZcBXjNE1AifaS85v+HaHEIl1Evh2aglFz VWZ5L03Ul4UGHHUuej8bAw7/iQcTu3MZubKqg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=haCUKocersM2g//bqn162Qgjk6DgHWiyvTJMF5LIhWw=; b=z6nqcGYkEFnP7XqwuplO0Ie6OHUzyO536ZrdfVAHjGLT0o+Tr5TYnwfQKRHABVS6qM 0UDSReZD53QSIXWDHoZKOPklBIYEud/BNmL5VXUpg52EG+H297Kv7Mo6cYlwZcUEOII/ Kj48e6IG4z2mJTyib8mPNUGjLW+H63AeBTbvTlGan03Rp3J7Mw5/lJ7FoBwmgPW75MAK bMTRopnh81QbV5W9CujcCsvsbOZN2Qolp9Xs/XLWiSXpJHfU4qDDIYqOIdpkxB5pHEu7 eH2aeytJf3B6/O/AYXFTCPGgEjyMU4Kt5T1yL1SBj2Wd49yDNY7EfyIIbzcQjh24eV8J 0Ynw== X-Gm-Message-State: AOAM530qWXYNqg0oS9dy81N8sdDNgg81e7xaAoGDACZBsXSGEy6rbE1h 5fW3DQpW+psFzOWqkEPlS9sKmg== X-Google-Smtp-Source: ABdhPJwC7im+Wu7WK7r8anEyQqm3GCI3zaun1ihNvzqAS141M0dKaySmYd4Yoapf0HcUrCF7/0wMeg== X-Received: by 2002:a17:903:187:: with SMTP id z7mr4252301plg.123.1644324094451; Tue, 08 Feb 2022 04:41:34 -0800 (PST) Received: from wenstp920.tpe.corp.google.com ([2401:fa00:1:10:41b6:813e:c823:609c]) by smtp.gmail.com with ESMTPSA id h11sm15056939pfe.214.2022.02.08.04.41.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Feb 2022 04:41:34 -0800 (PST) From: Chen-Yu Tsai To: Stephen Boyd , Michael Turquette , Matthias Brugger Cc: Chen-Yu Tsai , Chun-Jie Chen , AngeloGioacchino Del Regno , Miles Chen , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 21/31] clk: mediatek: cpumux: Implement error handling in register API Date: Tue, 8 Feb 2022 20:40:24 +0800 Message-Id: <20220208124034.414635-22-wenst@chromium.org> X-Mailer: git-send-email 2.35.0.263.gb82422642f-goog In-Reply-To: <20220208124034.414635-1-wenst@chromium.org> References: <20220208124034.414635-1-wenst@chromium.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220208_044135_210420_7EE4B561 X-CRM114-Status: GOOD ( 14.56 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The cpumux clk type registration function does not stop or return errors if any clk failed to be registered, nor does it implement an error handling path. This may result in a partially working device if any step failed. Make the register function return proper error codes, and bail out if errors occur. Proper cleanup, i.e. unregister any clks that were successfully registered, is done in the new error path. Signed-off-by: Chen-Yu Tsai Reviewed-by: Miles Chen Reviewed-by: AngeloGioacchino Del Regno --- drivers/clk/mediatek/clk-cpumux.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/clk/mediatek/clk-cpumux.c b/drivers/clk/mediatek/clk-cpumux.c index 658aee789f44..499c60432280 100644 --- a/drivers/clk/mediatek/clk-cpumux.c +++ b/drivers/clk/mediatek/clk-cpumux.c @@ -123,13 +123,26 @@ int mtk_clk_register_cpumuxes(struct device_node *node, clk = mtk_clk_register_cpumux(mux, regmap); if (IS_ERR(clk)) { pr_err("Failed to register clk %s: %pe\n", mux->name, clk); - continue; + goto err; } clk_data->clks[mux->id] = clk; } return 0; + +err: + while (--i >= 0) { + const struct mtk_composite *mux = &clks[i]; + + if (IS_ERR_OR_NULL(clk_data->clks[mux->id])) + continue; + + mtk_clk_unregister_cpumux(clk_data->clks[mux->id]); + clk_data->clks[mux->id] = ERR_PTR(-ENOENT); + } + + return PTR_ERR(clk); } void mtk_clk_unregister_cpumuxes(const struct mtk_composite *clks, int num, -- 2.35.0.263.gb82422642f-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel