All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Dooks <ben-linux@fluff.org>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: Locking in the clk API
Date: Thu, 20 Jan 2011 16:29:15 +0000	[thread overview]
Message-ID: <4D3862DB.5000708@fluff.org> (raw)
In-Reply-To: <20110111031552.GJ3760@linux-sh.org>

On 11/01/11 03:15, Paul Mundt wrote:
> On Tue, Jan 11, 2011 at 10:16:42AM +0800, Jeremy Kerr wrote:
>> * clk_enable: may sleep
>>
>> * clk_disable: may not sleep, but it's possible to make the global
>>   clk_disable() atomic and defer the actual disable (clk->ops.disable()) to a
>>   non-atomic context.
>>
>> * clk_get_rate: may not sleep
>>
>> * clk_set_rate: may sleep
>>
>> As we build up our requirements, we can adjust as suitable.
>>
> This looks like a complete disaster, and is also completely inconsistent
> with how the API is being used by the vast majority of users today. You
> have an API that can or can not sleep with no indication as to which is
> which based off of the API naming, which is just asking for trouble.
> 
> As it is today, most users expect that these are all usable from atomic
> context, and as far as I can tell the only special case you have are for
> some crap busses with insane latencies. In this case you should simply
> pile on _cansleep() versions of the API and make it apparent that those
> drivers are the special cases, not the other way around.

The trouble is not with the drivers, is the fact there could be a clock
tree where, say the closest to the driver is easy to control but the
base of the tree may be a PLL which requires time to settle.

Now, there's a lot of work in the 'embedded' space where the focus is on
the power consumption, so powering down PLLs when they are not needed is
a good thing to have/

> Having half of the API sleepable and the other not with no indication of
> which is which simply makes it completely unusable and error prone for
> both atomic and non-atomic contexts.

I really don't like the fact that people are doing these things in
atomic contexts, and I think we should apply some pressure to move
the atomic caller cases to use systems where they can sleep such as
using threaded-irq handlers (they work very nicely)

WARNING: multiple messages have this Message-ID (diff)
From: ben-linux@fluff.org (Ben Dooks)
To: linux-arm-kernel@lists.infradead.org
Subject: Locking in the clk API
Date: Thu, 20 Jan 2011 16:29:15 +0000	[thread overview]
Message-ID: <4D3862DB.5000708@fluff.org> (raw)
In-Reply-To: <20110111031552.GJ3760@linux-sh.org>

On 11/01/11 03:15, Paul Mundt wrote:
> On Tue, Jan 11, 2011 at 10:16:42AM +0800, Jeremy Kerr wrote:
>> * clk_enable: may sleep
>>
>> * clk_disable: may not sleep, but it's possible to make the global
>>   clk_disable() atomic and defer the actual disable (clk->ops.disable()) to a
>>   non-atomic context.
>>
>> * clk_get_rate: may not sleep
>>
>> * clk_set_rate: may sleep
>>
>> As we build up our requirements, we can adjust as suitable.
>>
> This looks like a complete disaster, and is also completely inconsistent
> with how the API is being used by the vast majority of users today. You
> have an API that can or can not sleep with no indication as to which is
> which based off of the API naming, which is just asking for trouble.
> 
> As it is today, most users expect that these are all usable from atomic
> context, and as far as I can tell the only special case you have are for
> some crap busses with insane latencies. In this case you should simply
> pile on _cansleep() versions of the API and make it apparent that those
> drivers are the special cases, not the other way around.

The trouble is not with the drivers, is the fact there could be a clock
tree where, say the closest to the driver is easy to control but the
base of the tree may be a PLL which requires time to settle.

Now, there's a lot of work in the 'embedded' space where the focus is on
the power consumption, so powering down PLLs when they are not needed is
a good thing to have/

> Having half of the API sleepable and the other not with no indication of
> which is which simply makes it completely unusable and error prone for
> both atomic and non-atomic contexts.

I really don't like the fact that people are doing these things in
atomic contexts, and I think we should apply some pressure to move
the atomic caller cases to use systems where they can sleep such as
using threaded-irq handlers (they work very nicely)

WARNING: multiple messages have this Message-ID (diff)
From: Ben Dooks <ben-linux@fluff.org>
To: Paul Mundt <lethal@linux-sh.org>
Cc: Jeremy Kerr <jeremy.kerr@canonical.com>,
	Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	linux-sh@vger.kernel.org,
	Ben Herrenschmidt <benh@kernel.crashing.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-kernel@vger.kernel.org,
	Uwe Kleine-K??nig <u.kleine-koenig@pengutronix.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: Locking in the clk API
Date: Thu, 20 Jan 2011 16:29:15 +0000	[thread overview]
Message-ID: <4D3862DB.5000708@fluff.org> (raw)
In-Reply-To: <20110111031552.GJ3760@linux-sh.org>

On 11/01/11 03:15, Paul Mundt wrote:
> On Tue, Jan 11, 2011 at 10:16:42AM +0800, Jeremy Kerr wrote:
>> * clk_enable: may sleep
>>
>> * clk_disable: may not sleep, but it's possible to make the global
>>   clk_disable() atomic and defer the actual disable (clk->ops.disable()) to a
>>   non-atomic context.
>>
>> * clk_get_rate: may not sleep
>>
>> * clk_set_rate: may sleep
>>
>> As we build up our requirements, we can adjust as suitable.
>>
> This looks like a complete disaster, and is also completely inconsistent
> with how the API is being used by the vast majority of users today. You
> have an API that can or can not sleep with no indication as to which is
> which based off of the API naming, which is just asking for trouble.
> 
> As it is today, most users expect that these are all usable from atomic
> context, and as far as I can tell the only special case you have are for
> some crap busses with insane latencies. In this case you should simply
> pile on _cansleep() versions of the API and make it apparent that those
> drivers are the special cases, not the other way around.

The trouble is not with the drivers, is the fact there could be a clock
tree where, say the closest to the driver is easy to control but the
base of the tree may be a PLL which requires time to settle.

Now, there's a lot of work in the 'embedded' space where the focus is on
the power consumption, so powering down PLLs when they are not needed is
a good thing to have/

> Having half of the API sleepable and the other not with no indication of
> which is which simply makes it completely unusable and error prone for
> both atomic and non-atomic contexts.

I really don't like the fact that people are doing these things in
atomic contexts, and I think we should apply some pressure to move
the atomic caller cases to use systems where they can sleep such as
using threaded-irq handlers (they work very nicely)

  parent reply	other threads:[~2011-01-20 16:29 UTC|newest]

Thread overview: 248+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-01-11  2:16 Locking in the clk API Jeremy Kerr
2011-01-11  2:16 ` Jeremy Kerr
2011-01-11  2:16 ` Jeremy Kerr
2011-01-11  3:15 ` Paul Mundt
2011-01-11  3:15   ` Paul Mundt
2011-01-11  3:15   ` Paul Mundt
2011-01-11  4:11   ` Jeremy Kerr
2011-01-11  4:11     ` Jeremy Kerr
2011-01-11  4:11     ` Jeremy Kerr
2011-01-11  4:54     ` Paul Mundt
2011-01-11  4:54       ` Paul Mundt
2011-01-11  4:54       ` Paul Mundt
2011-01-20 16:32       ` Ben Dooks
2011-01-20 16:32         ` Ben Dooks
2011-01-20 16:32         ` Ben Dooks
2011-01-20 18:57         ` Russell King - ARM Linux
2011-01-20 18:57           ` Russell King - ARM Linux
2011-01-20 18:57           ` Russell King - ARM Linux
2011-01-21  3:43           ` Saravana Kannan
2011-01-21  3:43             ` Saravana Kannan
2011-01-21  3:43             ` Saravana Kannan
2011-01-21  9:31             ` Russell King - ARM Linux
2011-01-21  9:31               ` Russell King - ARM Linux
2011-01-21  9:31               ` Russell King - ARM Linux
2011-01-11  9:03     ` Sascha Hauer
2011-01-11  9:03       ` Sascha Hauer
2011-01-11  9:03       ` Sascha Hauer
2011-01-11  9:28       ` Russell King - ARM Linux
2011-01-11  9:28         ` Russell King - ARM Linux
2011-01-11  9:28         ` Russell King - ARM Linux
2011-01-11 14:34         ` Pavel Machek
2011-01-11 14:34           ` Pavel Machek
2011-01-11 14:34           ` Pavel Machek
2011-01-20 16:29   ` Ben Dooks [this message]
2011-01-20 16:29     ` Ben Dooks
2011-01-20 16:29     ` Ben Dooks
2011-01-20 18:56     ` Russell King - ARM Linux
2011-01-20 18:56       ` Russell King - ARM Linux
2011-01-20 18:56       ` Russell King - ARM Linux
2011-01-20 21:30       ` Nicolas Pitre
2011-01-20 21:30         ` Nicolas Pitre
2011-01-20 21:30         ` Nicolas Pitre
2011-01-21  2:06         ` Dima Zavin
2011-01-21  2:06           ` Dima Zavin
2011-01-21  2:06           ` Dima Zavin
2011-01-21  4:12           ` Saravana Kannan
2011-01-21  4:12             ` Saravana Kannan
2011-01-21  4:12             ` Saravana Kannan
2011-01-21  9:32             ` Russell King - ARM Linux
2011-01-21  9:32               ` Russell King - ARM Linux
2011-01-21  9:32               ` Russell King - ARM Linux
2011-01-22  1:53               ` Saravana Kannan
2011-01-22  2:24                 ` Colin Cross
2011-01-22  2:56                   ` Saravana Kannan
2011-01-22  9:15                 ` Russell King - ARM Linux
2011-01-24 19:31                   ` Saravana Kannan
2011-01-21 21:03             ` Dima Zavin
2011-01-21 21:03               ` Dima Zavin
2011-01-21 21:03               ` Dima Zavin
2011-01-21 21:53               ` Nicolas Pitre
2011-01-21 21:53                 ` Nicolas Pitre
2011-01-21 21:53                 ` Nicolas Pitre
2011-01-21 22:02                 ` Russell King - ARM Linux
2011-01-21 22:02                   ` Russell King - ARM Linux
2011-01-21 22:02                   ` Russell King - ARM Linux
2011-01-21 22:28                   ` Colin Cross
2011-01-21 22:28                     ` Colin Cross
2011-01-21 22:28                     ` Colin Cross
2011-01-21 23:21                     ` Benjamin Herrenschmidt
2011-01-21 23:21                       ` Benjamin Herrenschmidt
2011-01-21 23:21                       ` Benjamin Herrenschmidt
2011-01-21 23:50                     ` Nicolas Pitre
2011-01-21 23:50                       ` Nicolas Pitre
2011-01-21 23:50                       ` Nicolas Pitre
2011-01-22  1:35                     ` Saravana Kannan
2011-01-22  1:35                       ` Saravana Kannan
2011-01-22  1:35                       ` Saravana Kannan
2011-01-22  2:22                       ` Colin Cross
2011-01-22  2:22                         ` Colin Cross
2011-01-22  2:22                         ` Colin Cross
2011-01-21 22:29                   ` Nicolas Pitre
2011-01-21 22:29                     ` Nicolas Pitre
2011-01-21 22:29                     ` Nicolas Pitre
2011-01-21 23:28                 ` Bryan Huntsman
2011-01-21 23:28                   ` Bryan Huntsman
2011-01-21 23:28                   ` Bryan Huntsman
2011-01-11  9:16 ` Russell King - ARM Linux
2011-01-11  9:16   ` Russell King - ARM Linux
2011-01-11  9:16   ` Russell King - ARM Linux
2011-01-11  9:44   ` Jeremy Kerr
2011-01-11  9:44     ` Jeremy Kerr
2011-01-11  9:44     ` Jeremy Kerr
2011-01-11 10:13     ` Paul Mundt
2011-01-11 10:13       ` Paul Mundt
2011-01-11 10:13       ` Paul Mundt
2011-01-11 10:30       ` Jeremy Kerr
2011-01-11 10:30         ` Jeremy Kerr
2011-01-11 10:30         ` Jeremy Kerr
2011-01-11 12:18         ` Paul Mundt
2011-01-11 12:18           ` Paul Mundt
2011-01-11 12:18           ` Paul Mundt
2011-01-11 13:52           ` 
2011-01-11 13:52             ` Uwe Kleine-König
2011-01-11 13:52             ` Uwe Kleine-König
2011-01-11 14:35           ` Jeremy Kerr
2011-01-11 14:35             ` Jeremy Kerr
2011-01-11 14:35             ` Jeremy Kerr
2011-01-12  3:25             ` Saravana Kannan
2011-01-12  3:25               ` Saravana Kannan
2011-01-12  3:25               ` Saravana Kannan
2011-01-12  7:40               ` 
2011-01-12  7:40                 ` Uwe Kleine-König
2011-01-12  7:40                 ` Uwe Kleine-König
2011-01-12  1:54           ` Saravana Kannan
2011-01-12  1:54             ` Saravana Kannan
2011-01-12  1:54             ` Saravana Kannan
2011-01-12  2:25             ` Paul Mundt
2011-01-12  2:25               ` Paul Mundt
2011-01-12  2:25               ` Paul Mundt
2011-01-20 16:57               ` Ben Dooks
2011-01-20 16:57                 ` Ben Dooks
2011-01-20 16:57                 ` Ben Dooks
2011-01-20 16:53           ` Ben Dooks
2011-01-20 16:53             ` Ben Dooks
2011-01-20 16:53             ` Ben Dooks
2011-01-20 16:40       ` Ben Dooks
2011-01-20 16:40         ` Ben Dooks
2011-01-20 16:40         ` Ben Dooks
2011-01-11 10:39     ` 
2011-01-11 10:39       ` Uwe Kleine-König
2011-01-11 10:39       ` Uwe Kleine-König
2011-01-11 10:47       ` Russell King - ARM Linux
2011-01-11 10:47         ` Russell King - ARM Linux
2011-01-11 10:47         ` Russell King - ARM Linux
2011-01-11 10:56         ` 
2011-01-11 10:56           ` Uwe Kleine-König
2011-01-11 10:56           ` Uwe Kleine-König
2011-01-11 11:15       ` Richard Zhao
2011-01-11 11:15         ` Richard Zhao
2011-01-11 11:15         ` Richard Zhao
2011-01-20 17:02         ` Ben Dooks
2011-01-20 17:02           ` Ben Dooks
2011-01-20 17:02           ` Ben Dooks
2011-01-20 19:08           ` Russell King - ARM Linux
2011-01-20 19:08             ` Russell King - ARM Linux
2011-01-20 19:08             ` Russell King - ARM Linux
2011-01-21  0:09             ` Jassi Brar
2011-01-21  0:09               ` Jassi Brar
2011-01-21  0:09               ` Jassi Brar
2011-01-21  4:47               ` Jassi Brar
2011-01-21  4:47                 ` Jassi Brar
2011-01-21  4:47                 ` Jassi Brar
2011-01-21  9:39                 ` Russell King - ARM Linux
2011-01-21  9:39                   ` Russell King - ARM Linux
2011-01-21  9:39                   ` Russell King - ARM Linux
2011-01-21 10:11                   ` Jassi Brar
2011-01-21 10:11                     ` Jassi Brar
2011-01-21 10:11                     ` Jassi Brar
2011-01-22  4:08                 ` Richard Zhao
2011-01-22  4:08                   ` Richard Zhao
2011-01-22  4:08                   ` Richard Zhao
2011-01-22  5:30                   ` Jassi Brar
2011-01-22  5:30                     ` Jassi Brar
2011-01-22  5:30                     ` Jassi Brar
2011-01-21  7:16             ` Saravana Kannan
2011-01-21  7:16               ` Saravana Kannan
2011-01-21  7:16               ` Saravana Kannan
2011-01-21  9:40               ` Russell King - ARM Linux
2011-01-21  9:40                 ` Russell King - ARM Linux
2011-01-21  9:40                 ` Russell King - ARM Linux
2011-01-22  1:47                 ` Saravana Kannan
2011-01-27  4:34                 ` Saravana Kannan
2011-01-27  4:34                   ` Saravana Kannan
2011-01-27  4:34                   ` Saravana Kannan
2011-01-27  8:54                   ` Russell King - ARM Linux
2011-01-27  8:54                     ` Russell King - ARM Linux
2011-01-27  8:54                     ` Russell King - ARM Linux
2011-01-27 20:30                     ` Saravana Kannan
2011-01-27 20:30                       ` Saravana Kannan
2011-01-27 20:30                       ` Saravana Kannan
2011-01-27 20:43                       ` Russell King - ARM Linux
2011-01-27 20:43                         ` Russell King - ARM Linux
2011-01-27 20:43                         ` Russell King - ARM Linux
2011-01-27 21:07                         ` Alan Cox
2011-01-27 21:07                           ` Alan Cox
2011-01-27 21:07                           ` Alan Cox
2011-01-27 21:11                           ` Russell King - ARM Linux
2011-01-27 21:11                             ` Russell King - ARM Linux
2011-01-27 21:11                             ` Russell King - ARM Linux
2011-01-27 21:15                           ` Russell King - ARM Linux
2011-01-27 21:15                             ` Russell King - ARM Linux
2011-01-27 21:15                             ` Russell King - ARM Linux
2011-01-28  3:29                           ` Saravana Kannan
2011-01-28  3:29                             ` Saravana Kannan
2011-01-28  3:29                             ` Saravana Kannan
2011-01-28  3:27                         ` Saravana Kannan
2011-01-28  3:27                           ` Saravana Kannan
2011-01-28  3:27                           ` Saravana Kannan
2011-01-11 12:11   ` Jassi Brar
2011-01-11 12:23     ` Jassi Brar
2011-01-11 12:11     ` Jassi Brar
2011-01-12  2:56   ` Saravana Kannan
2011-01-12  2:56     ` Saravana Kannan
2011-01-12  2:56     ` Saravana Kannan
2011-01-12  9:03     ` Russell King - ARM Linux
2011-01-12  9:03       ` Russell King - ARM Linux
2011-01-12  9:03       ` Russell King - ARM Linux
2011-01-15 14:02       ` Christer Weinigel
2011-01-15 14:02         ` Christer Weinigel
2011-01-15 14:02         ` Christer Weinigel
2011-01-15 14:53         ` Russell King - ARM Linux
2011-01-15 14:53           ` Russell King - ARM Linux
2011-01-15 14:53           ` Russell King - ARM Linux
2011-01-15 15:03           ` 
2011-01-15 15:03             ` Uwe Kleine-König
2011-01-15 15:03             ` Uwe Kleine-König
2011-01-15 15:15             ` Russell King - ARM Linux
2011-01-15 15:15               ` Russell King - ARM Linux
2011-01-15 15:15               ` Russell King - ARM Linux
2011-01-15 16:03               ` 
2011-01-15 16:03                 ` Uwe Kleine-König
2011-01-15 16:03                 ` Uwe Kleine-König
2011-01-15 16:21                 ` Russell King - ARM Linux
2011-01-15 16:21                   ` Russell King - ARM Linux
2011-01-15 16:21                   ` Russell King - ARM Linux
2011-01-15 16:31                   ` 
2011-01-15 16:31                     ` Uwe Kleine-König
2011-01-15 16:31                     ` Uwe Kleine-König
2011-01-16  6:59               ` Grant Likely
2011-01-16  6:59                 ` Grant Likely
2011-01-16  6:59                 ` Grant Likely
2011-01-15 17:07           ` Christer Weinigel
2011-01-15 17:07             ` Christer Weinigel
2011-01-15 17:07             ` Christer Weinigel
2011-01-15 17:20             ` Russell King - ARM Linux
2011-01-15 17:20               ` Russell King - ARM Linux
2011-01-15 17:20               ` Russell King - ARM Linux
2011-01-15 17:44               ` Christer Weinigel
2011-01-15 17:44                 ` Christer Weinigel
2011-01-15 17:44                 ` Christer Weinigel
2011-01-15 20:30                 ` Russell King - ARM Linux
2011-01-15 20:30                   ` Russell King - ARM Linux
2011-01-15 20:30                   ` Russell King - ARM Linux
2011-01-17  1:19 ` Jeremy Kerr
2011-01-17  1:19   ` Jeremy Kerr
2011-01-17  1:19   ` Jeremy Kerr
2011-01-17  1:27 ` Jeremy Kerr
2011-01-17  1:27   ` 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=4D3862DB.5000708@fluff.org \
    --to=ben-linux@fluff.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.