From patchwork Thu May 18 16:37:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 9734797 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 67F65601C8 for ; Thu, 18 May 2017 16:38:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 557CC285EC for ; Thu, 18 May 2017 16:38:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 498142879E; Thu, 18 May 2017 16:38:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CE58C285EC for ; Thu, 18 May 2017 16:38:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Pik1OqoPYneMGHCYi53cFCcN5sfcp0jAQKeGxZltI4g=; b=YpcMitrFCOE7MXMtpaNr8FWJK2 eI83mN5mS2XhXChjdOouzuFsL9T6AyuHrkxCayYyA0Emgzbnh8jGWXtc0XvH7to5ft8yC9sfy9bVr GVvV3dAceNTMerre4iasAcI6qWemCvGQgEkLYtyrYpzZGVo9B7n+dlOGMJwvk2w3TKZvYCglKVMQD V+0ZzmynwqS1gbxRs0bVD/PRWVEJuKf2eyGe31Iffx3puYyp+E/2vy75OUvtFNEY8IJpD0RJYSAjf odi/cElijW36Eowe7f5kpzyHgkoFUzuqSz3d/2KiqN2DdUFDl8KOvz0UD1TP1D5MrdzfQkTY3EW4y tsx+OI0Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dBORg-0003Ii-FO; Thu, 18 May 2017 16:38:36 +0000 Received: from mail-wm0-x229.google.com ([2a00:1450:400c:c09::229]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dBORc-0003FV-Kq for linux-amlogic@lists.infradead.org; Thu, 18 May 2017 16:38:35 +0000 Received: by mail-wm0-x229.google.com with SMTP id d127so58622705wmf.0 for ; Thu, 18 May 2017 09:38:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nrMnHGML8dCnvIltWFV38MjWiIbtCIbqAzWNgTaxHb8=; b=tCpTQ+KjQRn36UZKXwbU0fk2ZBZNCfsu88+Sv/v5STgrHoy3caIAWs5LgCd9OW/CEs GQk/WtyDROCbqrvvpo3/ICq0ahlRR9IqCmze/IilNe5cRsa0mLuhL8UI+8H5czLwWiPL MmsBJmeFS5g7tQnepZvysJSpcPaT9d/umaGjUGJ5cE2rtm3kY6I8e1dh6ppF6YrzqGG4 Gptfgu2/NAIfPsIek9v6h3nUfp7Ou7l1shXjVKw6yKmd8UImOy9yHQYnhXk+tj0l7Tpx fTZ5h8Ku9+kAlqZFVkXfaqxpNPd0CWHqcPYyFQ2qhO4xSSl9nJeeXoEWeUCY/m3m2aMs Vf5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nrMnHGML8dCnvIltWFV38MjWiIbtCIbqAzWNgTaxHb8=; b=SsKHQzmln2xxonSEcSBjkwtdQ7c8FOn1OF9nkp/B3LKfUGuzkn31IuKer8+r+qblqC w7wrM20/qkToQqqI9TnrAOtNti78Rig5PRzZ7XHDTZjHUM9De7xopWrDt3ajUQ2tfj4Z M+SZAvgOSOl541ozVKCzwcPVVFL8c2uuiyshq6K54uQTkx48tFv3IyW27Hsht5xnZCnX nJWy3TWXKFKUj14BvKuEVFU1GOET3MpYy2D03P7EqiHoRAvrin9loCs1P3ChwGjirO3M BR56+fQTLrUH3EkTbp2cG04r6PcCCfQWajAhLTzlJsfQsEF5g8IeYe4RXgy+Z7ok6QkS 4kSA== X-Gm-Message-State: AODbwcCqFpZ2l7lVZXFrmm9o12Plgqhx6w7roJL8njSApGFA+qmRYCLI pCd84piBAFJjllQb X-Received: by 10.28.170.11 with SMTP id t11mr3395930wme.44.1495125488941; Thu, 18 May 2017 09:38:08 -0700 (PDT) Received: from localhost.localdomain ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id 4sm7357655wrv.33.2017.05.18.09.38.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 May 2017 09:38:08 -0700 (PDT) From: Jerome Brunet To: Michael Turquette , Stephen Boyd , Kevin Hilman Subject: [PATCH 01/10] clk: take the prepare lock out of clk_core_set_paren Date: Thu, 18 May 2017 18:37:55 +0200 Message-Id: <20170518163804.14123-2-jbrunet@baylibre.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170518163804.14123-1-jbrunet@baylibre.com> References: <20170518163804.14123-1-jbrunet@baylibre.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170518_093832_860987_FD881D0A X-CRM114-Status: GOOD ( 13.86 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, Jerome Brunet MIME-Version: 1.0 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+patchwork-linux-amlogic=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Rework set_parent core function so it can be called when the prepare lock is already held by the caller. This rework is done to ease the integration of the "protected" clock functionality. Signed-off-by: Jerome Brunet --- drivers/clk/clk.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index fc58c52a26b4..f5c371532509 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1787,7 +1787,8 @@ bool clk_has_parent(struct clk *clk, struct clk *parent) } EXPORT_SYMBOL_GPL(clk_has_parent); -static int clk_core_set_parent(struct clk_core *core, struct clk_core *parent) +static int clk_core_set_parent_nolock(struct clk_core *core, + struct clk_core *parent) { int ret = 0; int p_index = 0; @@ -1796,23 +1797,16 @@ static int clk_core_set_parent(struct clk_core *core, struct clk_core *parent) if (!core) return 0; - /* prevent racing with updates to the clock topology */ - clk_prepare_lock(); - if (core->parent == parent) - goto out; + return 0; /* verify ops for for multi-parent clks */ - if ((core->num_parents > 1) && (!core->ops->set_parent)) { - ret = -ENOSYS; - goto out; - } + if ((core->num_parents > 1) && (!core->ops->set_parent)) + return -ENOSYS; /* check that we are allowed to re-parent if the clock is in use */ - if ((core->flags & CLK_SET_PARENT_GATE) && core->prepare_count) { - ret = -EBUSY; - goto out; - } + if ((core->flags & CLK_SET_PARENT_GATE) && core->prepare_count) + return -EBUSY; /* try finding the new parent index */ if (parent) { @@ -1820,8 +1814,7 @@ static int clk_core_set_parent(struct clk_core *core, struct clk_core *parent) if (p_index < 0) { pr_debug("%s: clk %s can not be parent of clk %s\n", __func__, parent->name, core->name); - ret = p_index; - goto out; + return p_index; } p_rate = parent->rate; } @@ -1831,7 +1824,7 @@ static int clk_core_set_parent(struct clk_core *core, struct clk_core *parent) /* abort if a driver objects */ if (ret & NOTIFY_STOP_MASK) - goto out; + return ret; /* do the re-parent */ ret = __clk_set_parent(core, parent, p_index); @@ -1844,9 +1837,6 @@ static int clk_core_set_parent(struct clk_core *core, struct clk_core *parent) __clk_recalc_accuracies(core); } -out: - clk_prepare_unlock(); - return ret; } @@ -1869,10 +1859,17 @@ static int clk_core_set_parent(struct clk_core *core, struct clk_core *parent) */ int clk_set_parent(struct clk *clk, struct clk *parent) { + int ret; + if (!clk) return 0; - return clk_core_set_parent(clk->core, parent ? parent->core : NULL); + clk_prepare_lock(); + ret = clk_core_set_parent_nolock(clk->core, + parent ? parent->core : NULL); + clk_prepare_unlock(); + + return ret; } EXPORT_SYMBOL_GPL(clk_set_parent); @@ -2753,7 +2750,7 @@ void clk_unregister(struct clk *clk) /* Reparent all children to the orphan list. */ hlist_for_each_entry_safe(child, t, &clk->core->children, child_node) - clk_core_set_parent(child, NULL); + clk_core_set_parent_nolock(child, NULL); } hlist_del_init(&clk->core->child_node);