[PATCH] x86_64: Make udelay more accurate
The attempt to avoid overflow in __delay caused varying precision on different CPUs depending on differences in the CPU speed. We should be able to do this multiplication with out overflowing provided the cpu is running at less than about 128 GHz. xloops < 20000 * 0x10c6. loops_per_jiffy * HZ <= cpu_clock_speed. So if the cpu clock speed < 2^64/(20000 * 0x10c6) = 2^64/ 51E6CC0 < 2^64/2^27 = 2^37 = 128G we will not overflow the calculation. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
e4e94072d9
commit
79c62cf178
|
@ -39,7 +39,7 @@ void __delay(unsigned long loops)
|
|||
|
||||
inline void __const_udelay(unsigned long xloops)
|
||||
{
|
||||
__delay(((xloops * cpu_data[raw_smp_processor_id()].loops_per_jiffy) >> 32) * HZ);
|
||||
__delay((xloops * HZ * cpu_data[raw_smp_processor_id()].loops_per_jiffy) >> 32);
|
||||
}
|
||||
|
||||
void __udelay(unsigned long usecs)
|
||||
|
|
Loading…
Reference in New Issue