lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1429107999-24413-6-git-send-email-aisheng.dong@freescale.com>
Date:	Wed, 15 Apr 2015 22:26:39 +0800
From:	Dong Aisheng <aisheng.dong@...escale.com>
To:	<linux-clk@...r.kernel.org>
CC:	<linux-kernel@...r.kernel.org>, <sboyd@...eaurora.org>,
	<mturquette@...aro.org>, <shawn.guo@...aro.org>,
	<b29396@...escale.com>, <linux-arm-kernel@...ts.infradead.org>,
	<Ranjani.Vaidyanathan@...escale.com>, <b20596@...escale.com>,
	<r64343@...escale.com>, <b20788@...escale.com>
Subject: [PATCH RFC v1 5/5] clk: introduce clk_core_enable_lock and clk_core_disable_lock functions

This can be usefully when clock core wants to enable/disable clocks.
Then we don't have to convert the struct clk_core to struct clk to call
clk_enable/clk_disable which is a bit un-align with exist using.

Cc: Mike Turquette <mturquette@...aro.org>
Cc: Stephen Boyd <sboyd@...eaurora.org>
Signed-off-by: Dong Aisheng <aisheng.dong@...escale.com>
---
 drivers/clk/clk.c | 79 +++++++++++++++++++++++++------------------------------
 1 file changed, 36 insertions(+), 43 deletions(-)

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index f2470e5..6c481e7 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -48,6 +48,8 @@ static int clk_core_prepare(struct clk_core *clk);
 static void clk_core_unprepare(struct clk_core *clk);
 static int clk_core_enable(struct clk_core *clk);
 static void clk_core_disable(struct clk_core *clk);
+static int clk_core_enable_lock(struct clk_core *clk);
+static void clk_core_disable_lock(struct clk_core *clk);
 
 /***    private data structures    ***/
 
@@ -523,9 +525,7 @@ static void clk_disable_unused_subtree(struct clk_core *clk)
 
 	if (clk->flags & CLK_SET_PARENT_ON && parent) {
 		clk_core_prepare(parent->core);
-		flags = clk_enable_lock();
-		clk_core_enable(parent->core);
-		clk_enable_unlock(flags);
+		clk_core_enable_lock(parent->core);
 	}
 
 	flags = clk_enable_lock();
@@ -553,9 +553,7 @@ static void clk_disable_unused_subtree(struct clk_core *clk)
 unlock_out:
 	clk_enable_unlock(flags);
 	if (clk->flags & CLK_SET_PARENT_ON && parent) {
-		flags = clk_enable_lock();
-		clk_core_disable(parent->core);
-		clk_enable_unlock(flags);
+		clk_core_disable_lock(parent->core);
 		clk_core_unprepare(parent->core);
 	}
 }
@@ -1050,6 +1048,15 @@ static void clk_core_disable(struct clk_core *clk)
 	clk_core_disable(clk->parent);
 }
 
+static void clk_core_disable_lock(struct clk_core *clk)
+{
+	unsigned long flags;
+
+	flags = clk_enable_lock();
+	clk_core_disable(clk);
+	clk_enable_unlock(flags);
+}
+
 /**
  * clk_disable - gate a clock
  * @clk: the clk being gated
@@ -1108,6 +1115,18 @@ static int clk_core_enable(struct clk_core *clk)
 	return 0;
 }
 
+static int clk_core_enable_lock(struct clk_core *clk)
+{
+	unsigned long flags;
+	int ret;
+
+	flags = clk_enable_lock();
+	ret = clk_core_enable(clk);
+	clk_enable_unlock(flags);
+
+	return ret;
+}
+
 /**
  * clk_enable - ungate a clock
  * @clk: the clk being ungated
@@ -1489,20 +1508,13 @@ static struct clk_core *__clk_set_parent_before(struct clk_core *clk,
 	 */
 	if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) {
 		clk_core_prepare(parent);
-		flags = clk_enable_lock();
-		clk_core_enable(parent);
-		clk_enable_unlock(flags);
+		clk_core_enable_lock(parent);
 
 		if (clk->prepare_count) {
-			flags = clk_enable_lock();
-			clk_core_enable(clk);
-			clk_enable_unlock(flags);
+			clk_core_enable_lock(clk);
 		} else {
-
 			clk_core_prepare(old_parent);
-			flags = clk_enable_lock();
-			clk_core_enable(old_parent);
-			clk_enable_unlock(flags);
+			clk_core_enable_lock(old_parent);
 		}
 	}
 
@@ -1518,26 +1530,18 @@ static void __clk_set_parent_after(struct clk_core *clk,
 				   struct clk_core *parent,
 				   struct clk_core *old_parent)
 {
-	unsigned long flags;
-
 	/*
 	 * Finish the migration of prepare state and undo the changes done
 	 * for preventing a race with clk_enable().
 	 */
 	if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) {
-		flags = clk_enable_lock();
-		clk_core_disable(old_parent);
-		clk_enable_unlock(flags);
+		clk_core_disable_lock(old_parent);
 		clk_core_unprepare(old_parent);
 
 		if (clk->prepare_count) {
-			flags = clk_enable_lock();
-			clk_core_disable(clk);
-			clk_enable_unlock(flags);
+			clk_core_disable_lock(clk);
 		} else {
-			flags = clk_enable_lock();
-			clk_core_disable(parent);
-			clk_enable_unlock(flags);
+			clk_core_disable_lock(parent);
 			clk_core_unprepare(parent);
 		}
 	}
@@ -1566,19 +1570,13 @@ static int __clk_set_parent(struct clk_core *clk, struct clk_core *parent,
 		clk_enable_unlock(flags);
 
 		if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) {
-			flags = clk_enable_lock();
-			clk_core_disable(parent);
-			clk_enable_unlock(flags);
+			clk_core_disable_lock(parent);
 			clk_core_unprepare(parent);
 
 			if (clk->prepare_count) {
-				flags = clk_enable_lock();
-				clk_core_disable(clk);
-				clk_enable_unlock(flags);
+				clk_core_disable_lock(clk);
 			} else {
-				flags = clk_enable_lock();
-				clk_core_disable(old_parent);
-				clk_enable_unlock(flags);
+				clk_core_disable_lock(old_parent);
 				clk_core_unprepare(old_parent);
 			}
 
@@ -1798,7 +1796,6 @@ static void clk_change_rate(struct clk_core *clk)
 	bool skip_set_rate = false;
 	struct clk_core *old_parent;
 	struct clk_core *parent = NULL;
-	unsigned long flags;
 
 	old_rate = clk->rate;
 
@@ -1831,9 +1828,7 @@ static void clk_change_rate(struct clk_core *clk)
 
 	if (clk->flags & CLK_SET_PARENT_ON && parent) {
 		clk_core_prepare(parent);
-		flags = clk_enable_lock();
-		clk_core_enable(parent);
-		clk_enable_unlock(flags);
+		clk_core_enable_lock(parent);
 	}
 
 	if (!skip_set_rate && clk->ops->set_rate)
@@ -1844,9 +1839,7 @@ static void clk_change_rate(struct clk_core *clk)
 	clk->rate = clk_recalc(clk, best_parent_rate);
 
 	if (clk->flags & CLK_SET_PARENT_ON && parent) {
-		flags = clk_enable_lock();
-		clk_core_disable(parent);
-		clk_enable_unlock(flags);
+		clk_core_disable_lock(parent);
 		clk_core_unprepare(parent);
 	}
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ