mirror of https://gitee.com/openkylin/linux.git
ARM: ensure delay timer has sufficient accuracy for delays
We have recently had an example of someone wanting to use a 90kHz timer for the software delay loop. udelay() needs to have at least microsecond resolution to allow drivers access to a delay mechanism with a reasonable chance of delaying the period they requested within at least a 50% marging of error, especially for small delays. Discussion about the udelay() accuracy can be found at: https://lkml.org/lkml/2011/1/9/37 Reject timers which are unable to supply this level of resolution. Acked-by: Nicolas Pitre <nico@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
37463be865
commit
57ca654bef
|
@ -83,6 +83,12 @@ void __init register_current_timer_delay(const struct delay_timer *timer)
|
|||
NSEC_PER_SEC, 3600);
|
||||
res = cyc_to_ns(1ULL, new_mult, new_shift);
|
||||
|
||||
if (res > 1000) {
|
||||
pr_err("Ignoring delay timer %ps, which has insufficient resolution of %lluns\n",
|
||||
timer, res);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!delay_calibrated && (!delay_res || (res < delay_res))) {
|
||||
pr_info("Switching to timer-based delay loop, resolution %lluns\n", res);
|
||||
delay_timer = timer;
|
||||
|
|
Loading…
Reference in New Issue