From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/2] Add a common struct clk
Date: Thu, 6 Jan 2011 21:11:38 +0100 [thread overview]
Message-ID: <20110106201137.GY25121@pengutronix.de> (raw)
In-Reply-To: <20110106160752.GA2775@riccoc20.at.omicron.at>
On Thu, Jan 06, 2011 at 05:07:52PM +0100, Richard Cochran wrote:
> On Wed, Jan 05, 2011 at 11:51:02AM +0800, Jeremy Kerr wrote:
>
> > + * The @lock member provides either a spinlock or a mutex to protect (at least)
> > + * @enable_count. The type of lock used will depend on @flags; if CLK_ATOMIC is
> > + * set, then the core clock code will use a spinlock, otherwise a mutex. This
> > + * lock will be acquired during clk_enable and clk_disable, so for atomic
> > + * clocks, these ops callbacks must not sleep.
> > + *
> > + * The choice of atomic or non-atomic clock depends on how the clock is enabled.
> > + * Typically, you'll want to use a non-atomic clock. For clocks that need to be
> > + * enabled/disabled in interrupt context, use CLK_ATOMIC. Note that atomic
> > + * clocks with parents will typically cascade enable/disable operations to
> > + * their parent, so the parent of an atomic clock *must* be atomic too.
>
> ...
>
> > +struct clk {
> > + const struct clk_ops *ops;
> > + unsigned int enable_count;
> > + int flags;
> > + union {
> > + struct mutex mutex;
> > + spinlock_t spinlock;
> > + } lock;
> > +};
>
> Here you have a "polymorphic" lock, where the clock instance knows
> which type it is supposed to be. I got flak from David Miller and
> others trying to do the same thing with the mdio_bus:
>
> http://kerneltrap.org/mailarchive/linux-netdev/2010/7/6/6280618
>
> The criticism, applied to your case, is that the clk_enable() caller
> cannot know whether it is safe to make the call or not. I was told,
> "there has got to be a better way."
Note that this is not "new". Currently there is no convention available
if clk_enable sleeps or not. See e.g.
http://thread.gmane.org/gmane.linux.ports.arm.kernel/100744
So if there is no consent and you want to introduce common code there is
no choice.
I don't like it, too. IMHO clk_enable should be allowed to sleep, but I
see the concerns of the other camp, too. If you know the better way
that has to exists, please tell us.
(Hmm, the way the gpio api does it comes to mind:
clk_enable_atomic
clk_enable_cansleep
(where one of these can be named clk_enable).)
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2011-01-06 20:11 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-05 3:51 [PATCH 0/2] Common struct clk implementation, v10 Jeremy Kerr
2011-01-05 3:51 ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2011-01-06 16:07 ` Richard Cochran
2011-01-06 20:11 ` Uwe Kleine-König [this message]
2011-01-07 0:10 ` Jeremy Kerr
2011-01-07 0:32 ` Russell King - ARM Linux
2011-01-07 9:40 ` Uwe Kleine-König
2011-01-08 13:15 ` Sascha Hauer
2011-01-10 2:43 ` Jeremy Kerr
2011-01-10 10:41 ` Sascha Hauer
2011-01-10 11:00 ` Russell King - ARM Linux
2011-01-11 0:54 ` Jeremy Kerr
2011-01-16 7:26 ` Grant Likely
2011-01-16 20:41 ` Ryan Mallon
2011-01-16 21:07 ` Uwe Kleine-König
2011-01-16 21:39 ` Ryan Mallon
2011-01-11 10:16 ` Sascha Hauer
2011-01-11 10:27 ` Jeremy Kerr
2011-01-11 11:22 ` Sascha Hauer
2011-01-18 8:44 ` Paul Mundt
2011-01-18 9:21 ` Sascha Hauer
2011-01-18 9:23 ` Paul Mundt
2011-01-18 12:21 ` Russell King - ARM Linux
2011-01-05 3:51 ` [PATCH 2/2] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-01-05 3:55 ` [PATCH 0/2] Common struct clk implementation, v10 Jeremy Kerr
2011-01-07 1:33 ` Ben Dooks
2011-01-07 9:49 ` Uwe Kleine-König
-- strict thread matches above, loose matches on Subject: below --
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-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-01-05 3:18 [PATCH 0/2] Common struct clk implementation, v10 Jeremy Kerr
2011-01-05 3:18 ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2010-12-08 2:08 [PATCH 0/2] Common struct clk implementation, v8 Jeremy Kerr
2010-12-08 2:08 ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2010-12-08 2:05 Jeremy Kerr
2010-12-08 10:21 ` Uwe Kleine-König
2010-12-10 1:58 ` Jeremy Kerr
2010-12-10 9:21 ` Uwe Kleine-König
2010-07-12 2:37 [PATCH 0/2] Common struct clk implementation, v6 Jeremy Kerr
2010-07-12 2:37 ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2010-06-21 5:35 [PATCH 0/2] Common struct clk implementation, v5 Jeremy Kerr
2010-06-21 5:35 ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2010-06-22 4:43 ` Baruch Siach
2010-07-05 2:33 ` MyungJoo Ham
2010-07-12 2:19 ` Jeremy Kerr
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=20110106201137.GY25121@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--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).