From: Christer Weinigel <christer@weinigel.se>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: Locking in the clk API
Date: Sat, 15 Jan 2011 17:07:38 +0000 [thread overview]
Message-ID: <4D31D45A.8080509@weinigel.se> (raw)
In-Reply-To: <20110115145358.GC15996@n2100.arm.linux.org.uk>
On 01/15/2011 03:53 PM, Russell King - ARM Linux wrote:
> On Sat, Jan 15, 2011 at 03:02:25PM +0100, Christer Weinigel wrote:
>> On platforms that need to sleep to enable the UART clock, configuring
>> the UART as the kernel console should be equivalent to userspace opening
>> the UART device, i.e. enable the clock. At least to me that feels like
>> an acceptable tradeoff, and if I wanted to save the last bit of power
>> I'll have to refrain from using UART as the kernel console.
>
> Well, we're not discussing a _new_ API here - we're discussing an API
> with existing users which works completely fine on the devices its
> used, with differing expectations between implementations.
Yes, so to fulfil the requirement that printk needs to call clk_enable
from atomic contexts, document that clk_enable can not sleep. Or add
the clk_enable_atomic call and modify printk to use it.
>> Both of these feel like they should use a call such as clk_get_atomic
>> and be able to handle EWOULDBLOCK/EAGAIN (or whatever error code is used
>> to indicate that it would have to sleep) and delegate to a worker thread
>> to enable the clock. To catch uses of plain clk_enable from atomic
>> contects, add a WARN_ON/BUG_ON(in_atomic()). It won't catch everything,
>> but would help a bit at least.
>
> We've never allowed clk_get() to be called in interruptible context,
> so that's not the issue. The issue is purely about clk_enable() and
> clk_disable() and whether they should be able to be called in atomic
> context or not.
My bad, it should have said "clk_enable_atomic".
> There's been a lot of talk on this issue for ages with no real progress
> that I'm just going to repeat: let's unify those implementations which
> use a spinlock for their clks into one consolidated solution, and
> a separate consolidated solution for those which use a mutex.
>
> This will at least allow us to have _some_ consolidation of the existing
> implementations - and it doesn't add anything to the problem at hand.
> It might actually help identify what can be done at code level to resolve
> this issue.
Won't that cause a lot of code duplication? If it's possible to have
one sane implementation, why not go for it at once?
/Christer
WARNING: multiple messages have this Message-ID (diff)
From: christer@weinigel.se (Christer Weinigel)
To: linux-arm-kernel@lists.infradead.org
Subject: Locking in the clk API
Date: Sat, 15 Jan 2011 18:07:38 +0100 [thread overview]
Message-ID: <4D31D45A.8080509@weinigel.se> (raw)
In-Reply-To: <20110115145358.GC15996@n2100.arm.linux.org.uk>
On 01/15/2011 03:53 PM, Russell King - ARM Linux wrote:
> On Sat, Jan 15, 2011 at 03:02:25PM +0100, Christer Weinigel wrote:
>> On platforms that need to sleep to enable the UART clock, configuring
>> the UART as the kernel console should be equivalent to userspace opening
>> the UART device, i.e. enable the clock. At least to me that feels like
>> an acceptable tradeoff, and if I wanted to save the last bit of power
>> I'll have to refrain from using UART as the kernel console.
>
> Well, we're not discussing a _new_ API here - we're discussing an API
> with existing users which works completely fine on the devices its
> used, with differing expectations between implementations.
Yes, so to fulfil the requirement that printk needs to call clk_enable
from atomic contexts, document that clk_enable can not sleep. Or add
the clk_enable_atomic call and modify printk to use it.
>> Both of these feel like they should use a call such as clk_get_atomic
>> and be able to handle EWOULDBLOCK/EAGAIN (or whatever error code is used
>> to indicate that it would have to sleep) and delegate to a worker thread
>> to enable the clock. To catch uses of plain clk_enable from atomic
>> contects, add a WARN_ON/BUG_ON(in_atomic()). It won't catch everything,
>> but would help a bit at least.
>
> We've never allowed clk_get() to be called in interruptible context,
> so that's not the issue. The issue is purely about clk_enable() and
> clk_disable() and whether they should be able to be called in atomic
> context or not.
My bad, it should have said "clk_enable_atomic".
> There's been a lot of talk on this issue for ages with no real progress
> that I'm just going to repeat: let's unify those implementations which
> use a spinlock for their clks into one consolidated solution, and
> a separate consolidated solution for those which use a mutex.
>
> This will at least allow us to have _some_ consolidation of the existing
> implementations - and it doesn't add anything to the problem at hand.
> It might actually help identify what can be done at code level to resolve
> this issue.
Won't that cause a lot of code duplication? If it's possible to have
one sane implementation, why not go for it at once?
/Christer
WARNING: multiple messages have this Message-ID (diff)
From: Christer Weinigel <christer@weinigel.se>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: "Saravana Kannan" <skannan@codeaurora.org>,
"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: Sat, 15 Jan 2011 18:07:38 +0100 [thread overview]
Message-ID: <4D31D45A.8080509@weinigel.se> (raw)
In-Reply-To: <20110115145358.GC15996@n2100.arm.linux.org.uk>
On 01/15/2011 03:53 PM, Russell King - ARM Linux wrote:
> On Sat, Jan 15, 2011 at 03:02:25PM +0100, Christer Weinigel wrote:
>> On platforms that need to sleep to enable the UART clock, configuring
>> the UART as the kernel console should be equivalent to userspace opening
>> the UART device, i.e. enable the clock. At least to me that feels like
>> an acceptable tradeoff, and if I wanted to save the last bit of power
>> I'll have to refrain from using UART as the kernel console.
>
> Well, we're not discussing a _new_ API here - we're discussing an API
> with existing users which works completely fine on the devices its
> used, with differing expectations between implementations.
Yes, so to fulfil the requirement that printk needs to call clk_enable
from atomic contexts, document that clk_enable can not sleep. Or add
the clk_enable_atomic call and modify printk to use it.
>> Both of these feel like they should use a call such as clk_get_atomic
>> and be able to handle EWOULDBLOCK/EAGAIN (or whatever error code is used
>> to indicate that it would have to sleep) and delegate to a worker thread
>> to enable the clock. To catch uses of plain clk_enable from atomic
>> contects, add a WARN_ON/BUG_ON(in_atomic()). It won't catch everything,
>> but would help a bit at least.
>
> We've never allowed clk_get() to be called in interruptible context,
> so that's not the issue. The issue is purely about clk_enable() and
> clk_disable() and whether they should be able to be called in atomic
> context or not.
My bad, it should have said "clk_enable_atomic".
> There's been a lot of talk on this issue for ages with no real progress
> that I'm just going to repeat: let's unify those implementations which
> use a spinlock for their clks into one consolidated solution, and
> a separate consolidated solution for those which use a mutex.
>
> This will at least allow us to have _some_ consolidation of the existing
> implementations - and it doesn't add anything to the problem at hand.
> It might actually help identify what can be done at code level to resolve
> this issue.
Won't that cause a lot of code duplication? If it's possible to have
one sane implementation, why not go for it at once?
/Christer
next prev parent reply other threads:[~2011-01-15 17:07 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
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 [this message]
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=4D31D45A.8080509@weinigel.se \
--to=christer@weinigel.se \
--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.