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 21441C433EF for ; Sat, 22 Jan 2022 09:35:23 +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=9Q23LlToQEzABaj8pS6EyYY39TSQSK8hFrtKOtaT4vc=; b=mv3NumGvIt8/fm yHuLW9I0z4hr8HycpxBwBl4VT1q41nUzeSpNqXyCm361XFCmhfM8kR7TYM/Obe1Zc7oBmsqGSR+KX rIaPTtHnCxH/XAzTzn40MoUZUvHQjPNrJrRC9nl+GTHYS1OyUgsETb0P/E3bEtTMAP5oUcSXWdsa+ aXMjI8GeeCyjKIOWqkRA7yLQM8TA+X4uZta6U6/XySan5jTIs1ZzvXI2RHteL/fvoZtY16PmGPtGi 8sQsXH8cLEbNDhjP3GeSq6oYe5TZ/24itmYVe1OkZmB/Ye1JtXyWr78obSwy9PXapPEi0oYUgKWW3 QhG+BkB99mMTW1AtrkRg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nBCmO-00GyBh-3U; Sat, 22 Jan 2022 09:33:52 +0000 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nBCXa-00GrnG-Ai for linux-arm-kernel@lists.infradead.org; Sat, 22 Jan 2022 09:18:35 +0000 Received: by mail-pf1-x430.google.com with SMTP id u130so6784990pfc.2 for ; Sat, 22 Jan 2022 01:18:33 -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=bEcl35j5JP2+GwvX5cOPxuaSCrM0lLatAIWiMekVNz3Trzfhovq5ppfeVWeLnM88B8 g5piy1+yPbrgqU+38K0cdM29wIC8lw4MyhUocvDS6BB/maTdiWIWCwppBZYnssQ/U7bC PrSnjoUpDBPRWarDM5zuYXu+Im3o4z/lg4vLvkQIreqBKJEKyBfxqN2biG7OhkRxSJC/ HxctiG8a/TOj0K9kFkl+qzhiX0nkYSt2d0i4BEPhqImZn4954nNAJT4VfzL9KfM3y/iD gV4UfcCDaeHtjUZmd0/HM/a2hCA3y3bmosjDiP9hGcn4jH/1MsB0xq47uERwZtD7qBV1 SFmw== X-Gm-Message-State: AOAM532+VUP4aaPK/cErxyExxDycJY8NhEQ+fx629lPIQbvnFAe7V3NY N4SCFrV6+WiXHdKKzcVVUxAcwQ== X-Google-Smtp-Source: ABdhPJxJiShS15jsyBrH2j+XqBNlWH2MNjyeLX7mBslEBYwQ2NuEg6RU8qADx6ysHah6+FMDvsbf+Q== 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220122_011834_387877_96BEE8DB X-CRM114-Status: GOOD ( 13.69 ) 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 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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel