Thread (38 messages) 38 messages, 5 authors, 2012-07-24
STALE5067d

[PATCH v2 2/2] ARM: delay: allow timer-based delay implementation to be selected

From: Will Deacon <hidden>
Date: 2012-07-12 08:44:33

On Thu, Jul 12, 2012 at 08:33:06AM +0100, Shinya Kuribayashi wrote:
Hi Will, Stephen,
Hi Shinya,
On 6/30/2012 2:33 AM, Will Deacon wrote:
quoted
+void __init init_current_timer_delay(unsigned long freq)
+{
+	pr_info("Switching to timer-based delay loop\n");
+	lpj_fine			= freq / HZ;
+	arm_delay_ops.delay		= __timer_delay;
+	arm_delay_ops.const_udelay	= __timer_const_udelay;
+	arm_delay_ops.udelay		= __timer_udelay;
+}
Once this function is processed, the udelay() behavior changes
_immediately_ from loop-based delay to timer-based one, without waiting
for 'loops_per_jiffy' itself being corrected in calibrate_delay().

As a result, actual udelay()s may be toooo long than expected, in
particular udelay()s used between init_current_timer_delay() and
calibrate_delay().  It's unlikely be short, as the frequency of a
counter for read_current_timer is typically slower than CPU frequency.
Surely using udelay before calibrate_delay_loop has been called is a
fundamental error?

Will
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help