From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: Don't ever downscale loops_per_jiffy in SMP systems
Date: Thu, 8 May 2014 21:52:23 +0100 [thread overview]
Message-ID: <20140508205223.GI3693@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <alpine.LFD.2.11.1405081600260.980@knanqh.ubzr>
On Thu, May 08, 2014 at 04:12:14PM -0400, Nicolas Pitre wrote:
> On Thu, 8 May 2014, Russell King - ARM Linux wrote:
>
> > Anything which is expecting precise timings from udelay() is broken.
> > Firstly, udelay() does _not_ guarantee to give you a delay of at least
> > the requested period - it tries to give an _approximate_ delay.
> >
> > The first thing to realise is that loops_per_jiffy is calibrated with
> > interrupts _on_, which means that the calculated loops_per_jiffy is
> > the number of iterations in a jiffy _minus_ the time it takes for the
> > timer interrupt to be processed. This means loops_per_jiffy will
> > always be smaller than the number of loops that would be executed
> > within the same period.
> >
> > This leads to udelay() always producing slightly shorter than
> > requested delays - this is quite measurable.
>
> OK, this is certainly bad. Hopefully it won't be that far off like it
> would when the CPU is in the middle of a clock freq transition.
It depends on the system, but my point is that assumption that udelay()
gives a delay of at least the requested time is something that is false,
and has *always* been false.
It's not "broken" either - it's just how the thing works, and the "fix"
for it is to use a timer based implementation which isn't affected by
interrupts.
> > So, the only /real/ solution if you want proper delays is for udelay()
> > to use a timer or counter, and this is should always the preferred
> > method where it's available. Quite rightly, we're not hacking udelay()
> > stuff to work around not having that, or if someone configures it out.
>
> What about using a default based on ktime_get(), or even sched_clock(),
> when SMP and cpufreq are configured in?
I see no reason to play those kinds of games. Keep the message simple.
If you're in a preempt or SMP environment, provide a timer for udelay().
IF you're in an environment with IRQs which can take a long time, use
a timer for udelay(). If you're in an environment where the CPU clock
can change unexpectedly, use a timer for udelay().
The very last thing we want to do is to sit around doing expensive calls
into various time keeping code which themselves add conversion on top,
which then end up making udelay() latency even worse than the loop-based
versions on slower machines.
So... the message is nice and simple: where possible, use a timer for
udelay().
--
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly
improving, and getting towards what was expected from it.
next prev parent reply other threads:[~2014-05-08 20:52 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-07 23:23 [PATCH] ARM: Don't ever downscale loops_per_jiffy in SMP systems Doug Anderson
2014-05-08 10:41 ` Viresh Kumar
2014-05-08 15:25 ` Doug Anderson
2014-05-08 16:04 ` Nicolas Pitre
2014-05-08 16:41 ` Doug Anderson
2014-05-08 17:43 ` Nicolas Pitre
2014-05-08 18:06 ` Doug Anderson
2014-05-08 19:59 ` Nicolas Pitre
2014-05-08 20:55 ` Russell King - ARM Linux
2014-05-09 0:02 ` Doug Anderson
2014-05-09 0:23 ` Russell King - ARM Linux
2014-05-09 4:41 ` Doug Anderson
2014-05-08 19:22 ` Russell King - ARM Linux
2014-05-08 20:12 ` Nicolas Pitre
2014-05-08 20:39 ` John Stultz
2014-05-08 20:52 ` Russell King - ARM Linux [this message]
2014-05-09 1:37 ` Nicolas Pitre
2014-05-09 4:43 ` Doug Anderson
2014-05-09 9:18 ` [PATCH] ARM: Don't ever downscale loops_per_jiffy in SMP systems# Russell King - ARM Linux
2014-05-09 18:00 ` Nicolas Pitre
2014-05-09 18:22 ` Russell King - ARM Linux
2014-05-09 21:05 ` Nicolas Pitre
2014-05-12 23:51 ` Doug Anderson
2014-05-13 21:50 ` Doug Anderson
2014-05-13 22:15 ` Stephen Warren
2014-05-13 23:15 ` Nicolas Pitre
2014-05-13 23:29 ` Nicolas Pitre
2014-05-13 23:36 ` Russell King - ARM Linux
2014-05-14 21:42 ` Doug Anderson
2014-05-15 6:12 ` Viresh Kumar
2014-05-09 9:25 ` [PATCH] ARM: Don't ever downscale loops_per_jiffy in SMP systems Viresh Kumar
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=20140508205223.GI3693@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--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;
as well as URLs for NNTP newsgroup(s).