From: jamie@shareable.org (Jamie Lokier)
To: linux-arm-kernel@lists.infradead.org
Subject: udelay() broken for SMP cores?
Date: Wed, 21 Apr 2010 21:47:18 +0100 [thread overview]
Message-ID: <20100421204718.GY27575@shareable.org> (raw)
In-Reply-To: <20100421202115.GH26616@n2100.arm.linux.org.uk>
Russell King - ARM Linux wrote:
> On Wed, Apr 21, 2010 at 08:52:25PM +0100, Jamie Lokier wrote:
> > Russell King - ARM Linux wrote:
> > > 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.
>
> You don't understand the issue. On older ARMs, the single 32-bit
> multiply is not cheap; it shows up as having a significant time
> expense for very short delays - and that _does_ matter.
>
> Consider system performance where you're driving a bus using udelay()
> to provide 1us timings, but udelay ends up taking 10us instead every
> time because of the calculation for number of loops for a 1us timing.
Hence nested loop. You don't multiply. No calculation.
> > 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.
>
> Here you're making a very big assumption - that there's some register
> you can read which is regularly clocked. That's not true on a lot of
> older ARMs, where we struggle to satisfy sched_clock() due to lack of
> such a register.
Yes, I know. I'm lucky to have one :-)
Where there is one, it seems like a good idea to use it if it's fast to read.
-- Jamie
next prev parent reply other threads:[~2010-04-21 20:47 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
2010-04-21 20:21 ` Russell King - ARM Linux
2010-04-21 20:47 ` Jamie Lokier [this message]
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=20100421204718.GY27575@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.