public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: tglx@linutronix.de (Thomas Gleixner)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RFC] clk: add support for automatic parent handling
Date: Fri, 22 Apr 2011 11:06:56 +0200 (CEST)	[thread overview]
Message-ID: <alpine.LFD.2.02.1104221024040.3323@ionos> (raw)
In-Reply-To: <4DB109EB.6000709@codeaurora.org>

On Thu, 21 Apr 2011, Saravana Kannan wrote:
> On 04/21/2011 08:38 AM, Thomas Gleixner wrote:
> > I seriously doubt that the fine grained per clock locking is going to
> > work out at all.
> 
> One thing we did to handle the locking issue was to have a lock per "class" of
> clocks. For example, we had one lock for clocks controlled by writing to
> registers, one lock for voting clocks that just do aggregation and one lock
> for these extremely slow clocks. Since each class of clocks are generally
> implemented in their own file, having one lock per class was just a matter of
> declaring a static-global lock inside the file and grabbing it before you do
> any transaction.

So you are talking about clock trees which are completely independent
of each other where you can never have any relationship between them?
 
> As Colin said in his email, a global lock is less of an issue with the
> clk_prepare/unprepare() APIs now in place. But even among prepare/unprepare or
> enable/disable, some clocks might take much longer than others. For example,
> prepare for a clock might just need enabling a PLL, but for another clock it
> might need enabling a PLL and increasing some voltage. If the voltage control
> is going to go thru I2C, then it's going to be pretty bad for the other clock
> doing the prepare.

Right, but that's pretty unavoidable if you need to do proper
propagation. And really we need to be able to traverse the tree in
both directions.

> I think if we have the parent/child relationship captured in the generic
> framework, we might be able to get away with per clock locking if we always
> make sure we grab the locks in a top-down or bottom-up fashion. We could even

You _CANNOT_ make sure that you traverse only in one direction and with
clocks which can be associated to different parents its going to be
even worse as you can create arbitrary lock orders that way.

> throw in some flags if we know that a clock will have a stable parent (one
> that doesn't change rates or need to lock children) to reduce how deep we have
> to traverse the tree.

Yes, we can be clever about how deep we traverse, but that's an
optimization and not a design decision. But we won't go to a point,
where we make locking conditional on a flag. That's broken by
definition.

We can add support for completely independent clock trees and make the
"global" locking per tree, but that's as far as it will go. Everything
else will result in a total nightmare. See the locking horror in
kernel/rtmutex.c:rt_mutex_adjust_prio_chain(). We'd end up with a way
worse mess for protecting eg. parent changes or complex rate
propagations.

We still have a mutex and a spinlock and either of them guarentees
that the parent child relation ship is not changing during a
traversal. So the fast path operations enable/disable require only the
spinlock and everything else (parent changes and rate settings) need
to be protected by the mutex simply because we can't do that with
spinlocks held and interrupts disabled.

Thanks,

	tglx

  reply	other threads:[~2011-04-22  9:06 UTC|newest]

Thread overview: 157+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-15 19:08 [RFC] sanitizing crazy clock data files Sascha Hauer
2011-04-15 19:08 ` [PATCH 01/10] Add a common struct clk Sascha Hauer
2011-04-21 19:48   ` Thomas Gleixner
2011-04-22  0:28     ` Richard Zhao
2011-04-22  9:23       ` Thomas Gleixner
2011-04-23 14:08         ` Richard Zhao
2011-04-23 15:30           ` Thomas Gleixner
2011-04-24  2:54             ` Richard Zhao
2011-04-24  7:20             ` Linus Walleij
2011-04-24  9:55               ` Richard Zhao
2011-04-22  4:57     ` Saravana Kannan
2011-04-22  9:13       ` Thomas Gleixner
2011-04-29 10:09     ` Russell King - ARM Linux
2011-04-29 10:45       ` Thomas Gleixner
2011-04-29 10:58         ` Tony Lindgren
2011-04-29 11:01         ` Russell King - ARM Linux
2011-04-30 18:30           ` Pavel Machek
2011-04-30  8:06   ` Linus Walleij
2011-04-30  9:01     ` Russell King - ARM Linux
2011-04-30 16:30       ` Linus Walleij
2011-05-01 20:33   ` Rob Herring
2011-05-02  1:09     ` Jeremy Kerr
2011-05-02  3:09       ` Rob Herring
2011-05-02  3:40         ` Jeremy Kerr
2011-05-02 16:30           ` Rob Herring
2011-05-02 22:36             ` Russell King - ARM Linux
2011-05-03  0:22               ` Saravana Kannan
2011-05-04  6:40                 ` Sascha Hauer
2011-05-04 18:33                   ` Saravana Kannan
2011-05-04 23:35               ` Paul Walmsley
2011-05-10 20:06                 ` Saravana Kannan
2011-05-02 16:55           ` David Brown
2011-05-02 17:31             ` Stephen Boyd
2011-04-15 19:08 ` [PATCH 02/10] clk: Generic support for fixed-rate clocks Sascha Hauer
2011-04-15 19:08 ` [PATCH 03/10] clk: Make NULL a valid clock again Sascha Hauer
2011-04-19  0:53   ` Jeremy Kerr
2011-04-19  6:25     ` Sascha Hauer
2011-04-20 12:53   ` Uwe Kleine-König
2011-04-15 19:08 ` [PATCH 04/10] clk: implement parent pass through functions Sascha Hauer
2011-04-18  9:25   ` Uwe Kleine-König
2011-04-18  9:48     ` Sascha Hauer
2011-04-19 17:20   ` Stephen Boyd
2011-04-19 17:53     ` Sascha Hauer
2011-04-19 19:09       ` Uwe Kleine-König
2011-04-19 20:58         ` Sascha Hauer
2011-04-19 21:54         ` Thomas Gleixner
2011-04-20  7:16           ` Uwe Kleine-König
2011-04-20  8:34             ` Thomas Gleixner
2011-04-20 14:07           ` [PATCH RFC] clk: add support for automatic parent handling Uwe Kleine-König
2011-04-20 16:16             ` Thomas Gleixner
2011-04-20 18:59               ` Uwe Kleine-König
2011-04-20 19:52                 ` Thomas Gleixner
2011-04-21  6:58                   ` Saravana Kannan
2011-04-21 10:33                     ` Thomas Gleixner
2011-04-21 19:22                       ` torbenh
2011-04-23 23:26                       ` Benjamin Herrenschmidt
2011-04-21  7:22                   ` Uwe Kleine-König
2011-04-21  9:12                     ` Thomas Gleixner
2011-04-21 10:31                       ` Mark Brown
2011-04-21 11:42                         ` Tony Lindgren
2011-04-21 14:52                           ` Thomas Gleixner
2011-04-22  7:09                             ` Tony Lindgren
2011-04-22  8:22                               ` Thomas Gleixner
2011-04-21 14:29                         ` Thomas Gleixner
2011-04-29 10:37                       ` Russell King - ARM Linux
2011-04-29 11:01                         ` Thomas Gleixner
2011-04-29 11:06                           ` Russell King - ARM Linux
2011-04-29 12:13                             ` Thomas Gleixner
2011-04-29 13:26                               ` Russell King - ARM Linux
2011-04-29 15:31                                 ` Thomas Gleixner
2011-04-29 22:07                                   ` Russell King - ARM Linux
2011-04-29 22:16                                     ` Thomas Gleixner
2011-04-29 22:19                                       ` Russell King - ARM Linux
2011-04-29 22:47                                         ` Thomas Gleixner
2011-04-30 14:27                                 ` torbenh
2011-05-03  6:35                                   ` Colin Cross
2011-05-05  8:35                                     ` torbenh
2011-05-03  2:44                                 ` Saravana Kannan
2011-05-03  2:46                                   ` Saravana Kannan
2011-04-21 10:13                     ` Mark Brown
2011-04-21 11:39                       ` Tony Lindgren
2011-04-21  7:42                   ` Sascha Hauer
2011-04-21  9:21                     ` Thomas Gleixner
2011-04-21 11:50                       ` Mark Brown
2011-04-21 12:20                         ` Thomas Gleixner
2011-04-21 12:35                           ` Mark Brown
2011-04-25  2:03                             ` Richard Zhao
2011-04-25 10:57                               ` Mark Brown
2011-04-25 14:41                                 ` Richard Zhao
2011-04-25 14:44                                   ` Mark Brown
2011-04-29 10:49                           ` Russell King - ARM Linux
2011-04-29 11:11                             ` Thomas Gleixner
2011-04-29 11:38                               ` Russell King - ARM Linux
2011-04-29 12:19                                 ` Thomas Gleixner
2011-04-29 13:27                                   ` Russell King - ARM Linux
2011-04-29 15:47                                     ` Thomas Gleixner
2011-04-21 12:06                       ` Sascha Hauer
2011-04-21 15:38                         ` Thomas Gleixner
2011-04-22  0:23                           ` Colin Cross
2011-04-22  9:51                             ` Thomas Gleixner
2011-04-22 16:14                               ` Thomas Gleixner
2011-04-22 16:39                               ` Colin Cross
2011-04-22 16:57                                 ` Thomas Gleixner
2011-04-22 22:26                                   ` Saravana Kannan
2011-04-22 22:55                                     ` Thomas Gleixner
2011-04-23  0:48                                       ` Saravana Kannan
2011-04-23 23:34                                         ` Benjamin Herrenschmidt
2011-04-22  4:54                           ` Saravana Kannan
2011-04-22  9:06                             ` Thomas Gleixner [this message]
2011-04-29 10:30                   ` Russell King - ARM Linux
2011-04-29 10:51                     ` Thomas Gleixner
2011-04-29 10:56                       ` Russell King - ARM Linux
2011-04-24  9:45             ` Richard Zhao
2011-04-24 20:14               ` Uwe Kleine-König
2011-04-29 10:20       ` [PATCH 04/10] clk: implement parent pass through functions Russell King - ARM Linux
2011-04-15 19:08 ` [PATCH 05/10] clk: Add support for simple dividers Sascha Hauer
2011-04-18  9:49   ` Uwe Kleine-König
2011-04-18 10:07     ` Sascha Hauer
2011-04-19  2:45       ` Saravana Kannan
2011-04-19  7:32         ` Uwe Kleine-König
2011-04-19  8:55           ` Saravana Kannan
2011-04-19  9:31             ` Sascha Hauer
2011-04-19 22:28               ` Saravana Kannan
2011-04-20  6:36                 ` Sascha Hauer
2011-04-20 21:45                   ` Saravana Kannan
2011-04-21  7:39                     ` Uwe Kleine-König
2011-04-28 15:14         ` Russell King - ARM Linux
2011-05-03  3:37           ` Saravana Kannan
2011-05-03  7:12             ` Uwe Kleine-König
2011-04-28 15:22     ` Russell King - ARM Linux
2011-05-02  7:58       ` Sascha Hauer
2011-04-18 22:40   ` Stephen Boyd
2011-04-19  0:32     ` Jeremy Kerr
2011-04-19  5:41       ` Stephen Boyd
2011-04-24 13:48   ` Richard Zhao
2011-04-25 18:51     ` Sascha Hauer
2011-04-26  1:54       ` Richard Zhao
2011-04-15 19:08 ` [PATCH 06/10] clk: Add support for a generic clock multiplexer Sascha Hauer
2011-04-18 13:15   ` Uwe Kleine-König
2011-04-18 13:33     ` Sascha Hauer
2011-04-18 13:54       ` Uwe Kleine-König
2011-04-18 17:54       ` Stephen Boyd
2011-04-18 18:34         ` Russell King - ARM Linux
2011-04-18 18:41           ` Russell King - ARM Linux
2011-04-18 18:46             ` Stephen Boyd
2011-04-15 19:08 ` [PATCH 07/10] ARM i.MX: Support for clock building blocks Sascha Hauer
2011-04-15 19:08 ` [PATCH 08/10] ARM i.MX: Add generic support for pllv2 Sascha Hauer
2011-04-15 19:08 ` [PATCH 09/10] ARM i.MX51/53: reimplement clock support Sascha Hauer
2011-04-15 19:08 ` [PATCH 10/10] ARM i.MX51/53: remove old " Sascha Hauer
2011-04-15 19:36 ` [RFC] sanitizing crazy clock data files Russell King - ARM Linux
2011-04-15 20:12   ` Sascha Hauer
2011-04-15 20:25     ` Russell King - ARM Linux
2011-04-15 20:28       ` Russell King - ARM Linux
2011-04-15 20:49         ` Uwe Kleine-König
2011-04-18  4:07     ` Shawn Guo
2011-04-15 20:45 ` Uwe Kleine-König
2011-04-18  7:42 ` Sascha Hauer

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=alpine.LFD.2.02.1104221024040.3323@ionos \
    --to=tglx@linutronix.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