From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: Locking in the clk API, part 2: clk_prepare/clk_unprepare
Date: Tue, 1 Feb 2011 21:24:09 +0000 [thread overview]
Message-ID: <20110201212409.GU31216@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <4D48741F.8060006@codeaurora.org>
On Tue, Feb 01, 2011 at 12:59:11PM -0800, Stephen Boyd wrote:
> On 02/01/2011 07:24 AM, Russell King - ARM Linux wrote:
> > I'd also be tempted at this stage to build-in a no-op dummy clock,
> > that being the NULL clk:
> >
> > int clk_prepare(struct clk *clk)
> > {
> > int ret = 0;
> >
> > if (clk) {
> > mutex_lock(&clk->mutex);
> > if (clk->prepared == 0)
> > ret = clk->ops->prepare(clk);
> > if (ret == 0)
> > clk->prepared++;
> > mutex_unlock(&clk->mutex);
> > }
> >
> > return ret;
> > }
>
> I'm afraid this will hide enable/disable imbalances on some targets and
> then expose them on others. Maybe its not a big problem though since
> this also elegantly handles the root(s) of the tree.
You can't catch enable/disable imbalances in the prepare code, and you
can't really catch them in the unprepare code either.
Consider two drivers sharing the same struct clk. When the second driver
prepares the clock, the enable count could well be non-zero, caused by
the first driver. Ditto for when the second driver is removed, and it
calls unprepare - the enable count may well be non-zero.
The only thing you can check is that when the prepare count is zero,
the enable count is also zero. You can also check in clk_enable() and
clk_disable() that the prepare count is non-zero.
If you want tigher checking than that, you need to somehow identify and
match up the clk_prepare/clk_enable/clk_disable/clk_unprepare calls from
a particular driver instance. Addresses of the functions don't work as
you can't be certain that driver code will be co-located within a certain
range. Adding an additional argument to these functions which is driver
instance specific seems to be horrible too.
next prev parent reply other threads:[~2011-02-01 21:24 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-01 9:11 Locking in the clk API, part 2: clk_prepare/clk_unprepare Jeremy Kerr
2011-02-01 10:54 ` Uwe Kleine-König
2011-02-01 13:05 ` Jassi Brar
2011-02-01 14:00 ` Uwe Kleine-König
2011-02-01 15:14 ` Russell King - ARM Linux
2011-02-01 15:22 ` Uwe Kleine-König
2011-02-01 15:28 ` Russell King - ARM Linux
2011-02-01 20:57 ` Saravana Kannan
2011-02-02 2:31 ` Jassi Brar
2011-02-01 13:15 ` Russell King - ARM Linux
2011-02-01 14:18 ` Uwe Kleine-König
2011-02-01 14:39 ` Russell King - ARM Linux
2011-02-01 15:18 ` Uwe Kleine-König
2011-02-01 15:24 ` Russell King - ARM Linux
2011-02-01 15:53 ` Uwe Kleine-König
2011-02-01 17:06 ` Russell King - ARM Linux
2011-02-01 19:32 ` Uwe Kleine-König
2011-02-01 19:56 ` Russell King - ARM Linux
2011-02-01 20:21 ` Saravana Kannan
2011-02-01 20:43 ` Uwe Kleine-König
2011-02-04 9:33 ` Richard Zhao
2011-02-01 20:06 ` Nicolas Pitre
2011-02-01 20:33 ` Saravana Kannan
2011-02-01 20:36 ` Russell King - ARM Linux
2011-02-01 20:59 ` Stephen Boyd
2011-02-01 21:24 ` Russell King - ARM Linux [this message]
2011-02-04 9:54 ` Richard Zhao
2011-02-04 10:21 ` Uwe Kleine-König
2011-02-04 10:57 ` Russell King - ARM Linux
2011-02-04 10:48 ` Russell King - ARM Linux
2011-02-04 11:04 ` Jassi Brar
2011-02-04 11:18 ` Russell King - ARM Linux
2011-02-04 11:51 ` Jassi Brar
2011-02-04 12:05 ` Russell King - ARM Linux
2011-02-01 14:40 ` Jeremy Kerr
2011-02-04 12:45 ` Richard Zhao
2011-02-04 13:20 ` Russell King - ARM Linux
2011-02-07 6:07 ` [RFC,PATCH 1/3] Add a common struct clk Jeremy Kerr
2011-02-07 7:05 ` Uwe Kleine-König
2011-02-07 8:08 ` Uwe Kleine-König
2011-02-07 8:21 ` Dima Zavin
2011-02-07 8:22 ` Jeremy Kerr
2011-02-07 19:59 ` Colin Cross
2011-02-08 1:40 ` Jeremy Kerr
2011-02-07 20:20 ` Ryan Mallon
2011-02-08 2:54 ` Jeremy Kerr
2011-02-08 3:30 ` Ryan Mallon
2011-02-08 7:28 ` Jeremy Kerr
2011-02-07 6:07 ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Jeremy Kerr
2011-02-07 6:29 ` Jassi Brar
2011-02-07 7:00 ` Jeremy Kerr
2011-02-07 8:05 ` Uwe Kleine-König
2011-02-07 8:08 ` Jeremy Kerr
2011-02-07 14:24 ` Nicolas Pitre
2011-02-10 4:26 ` Saravana Kannan
2011-02-07 6:07 ` [RFC,PATCH 2/3] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-02-07 6:07 ` [RFC,PATCH 0/3] Common struct clk implementation, v11 Jeremy Kerr
2011-02-09 6:41 ` [RFC,PATCH 0/3] Common struct clk implementation, v12 Jeremy Kerr
2011-02-09 6:41 ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Jeremy Kerr
2011-02-10 9:37 ` Richard Zhao
2011-02-15 2:00 ` Jeremy Kerr
2011-02-09 6:41 ` [RFC,PATCH 2/3] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-02-09 6:58 ` Fabio Giovagnini
2011-02-10 23:23 ` Ryan Mallon
2011-02-15 1:41 ` Jeremy Kerr
2011-02-15 4:51 ` Saravana Kannan
2011-02-15 6:18 ` Jeremy Kerr
2011-02-15 6:31 ` Saravana Kannan
2011-02-09 6:41 ` [RFC,PATCH 1/3] Add a common struct clk Jeremy Kerr
2011-02-09 9:00 ` Uwe Kleine-König
2011-02-09 20:21 ` Ryan Mallon
2011-02-09 20:39 ` Uwe Kleine-König
2011-02-09 20:42 ` Ryan Mallon
2011-02-10 10:03 ` Richard Zhao
2011-02-10 10:10 ` Ryan Mallon
2011-02-10 12:45 ` Richard Zhao
2011-02-10 10:46 ` Uwe Kleine-König
2011-02-10 13:08 ` Richard Zhao
2011-02-10 13:13 ` Russell King - ARM Linux
2011-02-15 1:36 ` Jeremy Kerr
2011-02-15 1:43 ` Ryan Mallon
2011-02-10 5:16 ` Saravana Kannan
2011-02-15 2:41 ` Jeremy Kerr
2011-02-15 5:33 ` Saravana Kannan
2011-02-15 7:26 ` Jeremy Kerr
2011-02-15 8:33 ` Saravana Kannan
2011-02-15 8:37 ` Russell King - ARM Linux
2011-02-15 9:33 ` Jeremy Kerr
2011-02-15 14:13 ` Richard Zhao
2011-02-20 13:07 ` Russell King - ARM Linux
2011-02-16 4:53 ` Saravana Kannan
2011-02-20 13:13 ` Russell King - ARM Linux
2011-02-21 2:50 ` [PATCH 0/2] Common struct clk implementation, v13 Jeremy Kerr
2011-02-21 2:50 ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2011-02-22 20:17 ` Uwe Kleine-König
2011-02-23 2:49 ` Jeremy Kerr
2011-02-21 2:50 ` [PATCH 2/2] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-02-21 19:51 ` Ryan Mallon
2011-02-21 23:29 ` Jeremy Kerr
2011-02-22 23:33 ` [PATCH] wip: convert imx27 to common struct clk Uwe Kleine-König
2011-02-23 4:17 ` Saravana Kannan
2011-02-23 8:15 ` Uwe Kleine-König
2011-03-03 6:40 ` [PATCH 0/2] Common struct clk implementation, v14 Jeremy Kerr
2011-03-03 6:40 ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2011-04-14 12:49 ` Tony Lindgren
2011-03-03 6:40 ` [PATCH 2/2] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-03-14 10:16 ` [PATCH 0/2] Common struct clk implementation, v14 Uwe Kleine-König
2011-03-15 4:31 ` Jeremy Kerr
2011-03-21 2:33 ` Jeremy Kerr
2011-04-14 4:20 ` Jeremy Kerr
2011-04-14 10:00 ` Russell King - ARM Linux
2011-04-14 10:23 ` Jeremy Kerr
2011-04-14 10:26 ` Russell King - ARM Linux
2011-04-14 10:25 ` Benjamin Herrenschmidt
2011-04-14 10:32 ` Russell King - ARM Linux
2011-04-14 11:59 ` Nicolas Pitre
2011-04-14 12:09 ` Russell King - ARM Linux
2011-04-14 13:39 ` Nicolas Pitre
2011-04-14 14:00 ` Mark Brown
2011-04-14 15:38 ` Russell King - ARM Linux
2011-04-14 16:06 ` Nicolas Pitre
2011-04-14 17:20 ` Uwe Kleine-König
2011-04-18 10:54 ` Paul Mundt
2011-04-20 14:28 ` Uwe Kleine-König
2011-04-20 16:41 ` Thomas Gleixner
2011-04-20 21:30 ` Paul McKenney
2011-04-14 19:29 ` Saravana Kannan
2011-04-14 16:08 ` Uwe Kleine-König
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110201212409.GU31216@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).