Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp2507820pxb; Sun, 23 Jan 2022 06:58:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJznvneeRaYFyjCbqRzz0KFraS1NRmD/evAtErnXoFDxSL/f7eVCTWDlh/knlTwtE5sGKnIf X-Received: by 2002:a17:90b:388d:: with SMTP id mu13mr1489713pjb.171.1642949886683; Sun, 23 Jan 2022 06:58:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642949886; cv=none; d=google.com; s=arc-20160816; b=0b3GBFTf/KDomjXt0sQZeBjKFbWPbVmDNZCalCQnG9bYrux7R+niIL0y+7LRNK24wi 4kHi++y7g9wQK3rWz77X/QDoxY9Bdihywwt1uNtTG8gKWgpaHj2oqXVGirs3kJdmOERZ GLqdHJK7an1mtOYnsYvvM/UoYdu1/XXE5RNaNEEqYhJfby5mXcj0NunlSrvs2dqYN/7L AG0Pn7wQLxPJ3uAH0Vz6QvXRDLATTPcRKhjGpfEI7Sp6W3ltqlZudMg4x7W/7/hY2pat e5Tdk/ZRO09a29c+FxOnbIsA8SgzCEjzahVIl50no4P2N049fPlALLOh+sYGtKqnORAK Ot2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1TEZ0MfngpjieBK0SXrIypAK0YzHVKnAErn4UHbTrxk=; b=cabvUojRPKNn5OnuG2TsNVfkofEULZtBMxvMYRYVOlwrlS996uoqmarXRiV6SfP12x aFzbQsDlm3GlxxqiD68VQAAGneGWNIIqd+8pvJDTskyF4EztJa1vyqh102DoY6jSScov 5e29siwyy0Hoem/bmPSYsD+dTstps18X5KJ10V7cEXss2tJZOKfMiX1s99UIzWEDdAbL f0oObzR+WcbZ/Qft1IWjjJjTEFFWsV7HSLPVPsSQd6qDW6o5uqVQRndK6FdyWZmSOkpY Vs18N7fvO5W90ShQ36BiiVJ//UHJzQeXpisC2kiqZ7d8hHgqVf2CKfU/eRa5eaStfDvN Dxqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=G89iIeSL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f10si12797215plg.145.2022.01.23.06.57.55; Sun, 23 Jan 2022 06:58:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=G89iIeSL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234138AbiAVJT6 (ORCPT + 99 others); Sat, 22 Jan 2022 04:19:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234116AbiAVJTM (ORCPT ); Sat, 22 Jan 2022 04:19:12 -0500 Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC3F2C06173B for ; Sat, 22 Jan 2022 01:18:34 -0800 (PST) Received: by mail-pf1-x433.google.com with SMTP id u10so6522393pfg.10 for ; Sat, 22 Jan 2022 01:18: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=1TEZ0MfngpjieBK0SXrIypAK0YzHVKnAErn4UHbTrxk=; b=G89iIeSLYaSHnG28ej39jy7C6u1UfWz4foTwDQ3HDtc1rwz7fX2NqHJAzXQGdhTaM7 7dkLHYZsAY363xBWB4t2vrJVLdsj7YQorPuqazaY1Zwn/+TUsRlc6Ic7+WjjdaooeKuk gURdzHetX2DAxi4E6qBVou42HNmx++CcJTDEw= 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=1TEZ0MfngpjieBK0SXrIypAK0YzHVKnAErn4UHbTrxk=; b=hsaMFdqUBrz3CqQpOKM4GUBRCvPakuCI+iknDrPiqP/369wrroAzsiHk0QURLozTu3 GXM4zyaDccfr+p4fHR/6W0GhaZTLsAM/yDFMq33X2CSx+/ADlWDaHJ+RcQYGIsgcy6PB 7RDlL5EoCGXhRQ1O32sTPgcLqRBbeP0uxw6kBS/b6uYAHqdFXhRu37oKGm2THnz3yW/H Zr/zckQiNGjyu6vbcLU13moUrZZsxf0x1I9h00fG9mgY0IqZXw5Bd48Gq2rSKEkpDafr WaT8LzYnJ2LBkwzSLrMeKxzkODvIdpUzvofSMcKtmo5HMlFEzNHciS/x/f5HaUVEXAyB 7iDA== X-Gm-Message-State: AOAM5335Akl/I+W+AVoid+kH8qpRkPWq49wOQycKcvhSfeZeX1BCZjVB +kC+WPhUtKLPKQrYaJ4jVXgjag== X-Received: by 2002:a63:4e5a:: with SMTP id o26mr5497546pgl.272.1642843113500; Sat, 22 Jan 2022 01:18:33 -0800 (PST) Received: from wenstp920.tpe.corp.google.com ([2401:fa00:1:10:349f:9373:45d9:eb26]) by smtp.gmail.com with ESMTPSA id s1sm1608100pjn.42.2022.01.22.01.18.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 01:18:33 -0800 (PST) From: Chen-Yu Tsai To: Stephen Boyd , Michael Turquette , Matthias Brugger Cc: Chen-Yu Tsai , Chun-Jie Chen , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 22/31] clk: mediatek: gate: Implement error handling in register API Date: Sat, 22 Jan 2022 17:17:22 +0800 Message-Id: <20220122091731.283592-23-wenst@chromium.org> X-Mailer: git-send-email 2.35.0.rc0.227.g00780c9af4-goog In-Reply-To: <20220122091731.283592-1-wenst@chromium.org> References: <20220122091731.283592-1-wenst@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The gate 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 --- drivers/clk/mediatek/clk-gate.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/clk/mediatek/clk-gate.c b/drivers/clk/mediatek/clk-gate.c index e8881ae1489a..631ff170b7b9 100644 --- a/drivers/clk/mediatek/clk-gate.c +++ b/drivers/clk/mediatek/clk-gate.c @@ -237,13 +237,26 @@ int mtk_clk_register_gates_with_dev(struct device_node *node, if (IS_ERR(clk)) { pr_err("Failed to register clk %s: %pe\n", gate->name, clk); - continue; + goto err; } clk_data->clks[gate->id] = clk; } return 0; + +err: + while (--i >= 0) { + const struct mtk_gate *gate = &clks[i]; + + if (IS_ERR_OR_NULL(clk_data->clks[gate->id])) + continue; + + mtk_clk_unregister_gate(clk_data->clks[gate->id]); + clk_data->clks[gate->id] = ERR_PTR(-ENOENT); + } + + return PTR_ERR(clk); } int mtk_clk_register_gates(struct device_node *node, -- 2.35.0.rc0.227.g00780c9af4-goog