From: Jeremy Kerr <jeremy.kerr@canonical.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [RFC,PATCH 1/3] Add a common struct clk
Date: Tue, 15 Feb 2011 02:41:40 +0000 [thread overview]
Message-ID: <201102151041.40655.jeremy.kerr@canonical.com> (raw)
In-Reply-To: <4D53749B.6010102@codeaurora.org>
Hi Saravana,
> Shouldn't you be grabbing the prepare_lock here?
This depends on semantics that (as far as I can tell) aren't defined yet. We
may even want to disallow set_rate (and set_parent) when prepare_count is non-
zero.
Ideally, we should work out what the semantics are with regards to changing a
clock's rate when it has multiple users and/or is enabled or prepared, but
that's a separate issue, and we should *definitely* implement that as a
separate change.
I'd prefer to enforce the 'sleepability' with might_sleep instead.
> You should probably rename the lock to something else since it's not
> limited to prepare/unprepare. How about resource_lock?
It's not, but that's the only thing it's protecting in the common code. I'm
open for better names, but resource_lock is too generic.
> > +int clk_set_parent(struct clk *clk, struct clk *parent)
> > +{
> > + if (clk->ops->set_parent)
> > + return clk->ops->set_parent(clk, parent);
>
> I'm not sure on this one. If the prepare ops for a clock also calls the
> prepare ops on the parent, shouldn't we prevent changing the parent
> while the prepare/unprepare is going on?
Again, this is related to set_rate during enable/disable or prepare/unprepare;
we don't have defined semantics for this at present.
> > +
> > +/* static initialiser for clocks */
> > +#define INIT_CLK(name, o) { \
> > + .ops =&o, \
> > + .enable_count = 0, \
> > + .prepare_count = 0, \
>
> Do we need these inits? Doesn't check patch complain about initing
> static/global to 0? If it's generally frowned upon, why the exception
> here. I realize that checkpatch won't catch this, but still...
This took some reading through c99, but yes, it looks like we can drop these
zero initialisations.
However, the coding style convention for the implicit zeroing of static
variables is to allow these variables to be put into the .bss section,
reducing object size. In this case, the clock will never be able to go into
.bss (it has non-zero elements too), and so this will have no change on object
size. I prefer to be explicit here, and show that the counts are initialised
to zero.
I'm happy to go either way. I have a preference for the explicit
initialisation, but that may not be general style.
>
> > + .enable_lock = __SPIN_LOCK_UNLOCKED(name.enable_lock), \
> > + .prepare_lock = __MUTEX_INITIALIZER(name.prepare_lock), \
>
> After a long day, I'm not able to wrap my head around this. Probably a
> stupid question, but will this name.xxx thing prevent using this
> INIT_CLK macro to initialize an array of clocks? More specifically,
> prevent the sub class macro (like INIT_CLK_FIXED) from being used to
> initialize an array of clocks?
That's correct. For an array of clocks, you'll have to use a different
initialiser. We can add helpers for that that when (and if) the need arises.
> > + * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow
> > + * implementations to split any work between atomic (enable) and
> > sleepable + * (prepare) contexts. If a clock requires blocking code to
> > be turned on, this
>
> Aren't all locks blocking? Shouldn't it be, "If turning on a clock
> requires code that might sleep, it should be done in clk_prepare"?
> Replace all "blocking" with "sleepable" or "sleeping" in the comments?
I think "blocking" is generally accepted as is intended in this case, but it's
probably better to be explicit here.
>
> > + * should be done in clk_prepare. Switching that will not block should
> > be done + * in clk_enable.
> > + *
> > + * Typically, drivers will call clk_prepare when a clock may be needed
> > later + * (eg. when a device is opened), and clk_enable when the clock
> > is actually + * required (eg. from an interrupt). Note that clk_prepare
> > *must* have been + * called before clk_enable.
> > + *
> > + * For other callbacks, see the corresponding clk_* functions.
> > Parameters and + * return values are passed directly from/to these API
> > functions, or + * -ENOSYS (or zero, in the case of clk_get_rate) is
> > returned if the callback + * is NULL, see kernel/clk.c for
> > implementation details. All are optional.
>
> is NULL. See kernel... ?
Ah, yes, I'll update this.
Cheers,
Jeremy
next prev parent reply other threads:[~2011-02-15 2:41 UTC|newest]
Thread overview: 127+ 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 `
2011-02-01 13:05 ` Jassi Brar
2011-02-01 14:00 `
2011-02-01 15:14 ` Russell King - ARM Linux
2011-02-01 15:22 `
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 `
2011-02-01 14:39 ` Russell King - ARM Linux
2011-02-01 15:18 `
2011-02-01 15:24 ` Russell King - ARM Linux
2011-02-01 15:53 `
2011-02-01 17:06 ` Russell King - ARM Linux
2011-02-01 19:32 `
2011-02-01 19:56 ` Russell King - ARM Linux
2011-02-01 20:21 ` Saravana Kannan
2011-02-01 20:43 `
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
2011-02-04 9:54 ` Richard Zhao
2011-02-04 10:21 `
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 `
2011-02-07 7:09 `
2011-02-07 8:08 `
[not found] ` <AANLkTim1S9zpebn3yj1fBZTtOkqj2FLwhYWBZ2HXJajR@mail.gmail.com>
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 0/3] Common struct clk implementation, v11 Jeremy Kerr
2011-02-07 6:07 ` [RFC,PATCH 2/3] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-02-07 6:07 ` [RFC, Jeremy Kerr
2011-02-07 6:29 ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Jassi Brar
2011-02-07 7:00 ` Jeremy Kerr
2011-02-07 8:05 ` [RFC, PATCH 3/3] clk: add warnings for incorrect
2011-02-07 8:08 ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Jeremy Kerr
2011-02-07 14:24 ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare Nicolas Pitre
2011-02-10 4:26 ` Saravana Kannan
2011-02-09 6:41 ` [RFC,PATCH 0/3] Common struct clk implementation, v12 Jeremy Kerr
2011-02-09 6:41 ` [RFC, Jeremy Kerr
2011-02-10 9:37 ` [RFC, PATCH 3/3] clk: add warnings for incorrect Richard Zhao
2011-02-15 2:00 ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics 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 `
2011-02-09 20:21 ` Ryan Mallon
2011-02-09 20:39 `
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 `
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 [this message]
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 `
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
2011-02-23 4:17 ` Saravana Kannan
2011-02-23 8:15 `
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
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 `
2011-04-18 10:54 ` Paul Mundt
2011-04-20 14:28 `
2011-04-20 16:41 ` Thomas Gleixner
2011-04-14 19:29 ` Saravana Kannan
2011-04-14 16:08 `
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=201102151041.40655.jeremy.kerr@canonical.com \
--to=jeremy.kerr@canonical.com \
--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).