From: jamie@shareable.org (Jamie Lokier)
To: linux-arm-kernel@lists.infradead.org
Subject: udelay() broken for SMP cores?
Date: Wed, 21 Apr 2010 20:52:25 +0100 [thread overview]
Message-ID: <20100421195225.GS27575@shareable.org> (raw)
In-Reply-To: <20100421192911.GA26616@n2100.arm.linux.org.uk>
Russell King - ARM Linux wrote:
> On Wed, Apr 21, 2010 at 11:00:08AM +0100, Jamie Lokier wrote:
> > Russell King - ARM Linux wrote:
> > > Well, the assumption is that the CPUs will be running at their fastest
> > > speed at boot time, and therefore loops_per_jiffy will be calibrated
> > > such that we guarantee _at least_ the asked-for delay - which is the
> > > only guarantee udelay has.
> >
> > That's an interesting and not altogether reliable assumption.
>
> That depends which bit you're talking about. udelay() must give you the
> delay you asked for, or a longer delay. If it gives you a shorter delay,
> it's buggy plain and simple.
>
> > On a device I'm working with, we just read a fixed-speed clock
> > register in a loop. It's slower than the CPU register loop, but given
> > udelay counts in great big slow _microsecond_ delays (how quaint! ;-)
> > that's fine.
>
> We could go to ns delays, but then we have a big problem - the cost of
> calculating the number of loops starts to become significant compared to
> the delays - and that's a quality of implementation factor. In fact,
> the existing cost has always been significant for short delays for
> slower (sub-100MHz) ARMs.
I'm surprised it makes much difference to, say, 20MHz ARMs because you
could structure it as a nested loop, the inner one executed once per
microsecond and calibrated to 1us. The delays don't have to be super
accurate.
With a fixed-speed clock register known at compile time, the
calculation tends to constant-fold nicely, even for ns delays. Not
suitable for multi-target kernels but good on single-target.
-- Jamie
next prev parent reply other threads:[~2010-04-21 19:52 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-21 2:19 udelay() broken for SMP cores? Saravana Kannan
2010-04-21 4:56 ` Shilimkar, Santosh
2010-04-21 6:43 ` Saravana Kannan
2010-04-21 7:22 ` Russell King - ARM Linux
2010-04-21 9:39 ` skannan at codeaurora.org
2010-04-21 9:50 ` Russell King - ARM Linux
2010-04-21 9:58 ` Gilles Chanteperdrix
2010-04-21 10:00 ` Jamie Lokier
2010-04-21 19:29 ` Russell King - ARM Linux
2010-04-21 19:52 ` Jamie Lokier [this message]
2010-04-21 20:21 ` Russell King - ARM Linux
2010-04-21 20:47 ` Jamie Lokier
2010-04-21 20:57 ` Russell King - ARM Linux
2010-04-22 0:14 ` Jamie Lokier
2011-01-08 23:24 ` Russell King - ARM Linux
2010-04-21 10:31 ` skannan at codeaurora.org
2010-04-21 19:33 ` Russell King - ARM Linux
2010-04-21 23:47 ` Saravana Kannan
2010-04-21 23:47 ` Saravana Kannan
2010-04-23 9:00 ` Pavel Machek
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=20100421195225.GS27575@shareable.org \
--to=jamie@shareable.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.