aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/tsc.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/tsc.c')
-rw-r--r--arch/x86/kernel/tsc.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 505449700e0c..7437b41f6a47 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -598,10 +598,19 @@ static unsigned long quick_pit_calibrate(void)
598 if (!pit_expect_msb(0xff-i, &delta, &d2)) 598 if (!pit_expect_msb(0xff-i, &delta, &d2))
599 break; 599 break;
600 600
601 delta -= tsc;
602
603 /*
604 * Extrapolate the error and fail fast if the error will
605 * never be below 500 ppm.
606 */
607 if (i == 1 &&
608 d1 + d2 >= (delta * MAX_QUICK_PIT_ITERATIONS) >> 11)
609 return 0;
610
601 /* 611 /*
602 * Iterate until the error is less than 500 ppm 612 * Iterate until the error is less than 500 ppm
603 */ 613 */
604 delta -= tsc;
605 if (d1+d2 >= delta >> 11) 614 if (d1+d2 >= delta >> 11)
606 continue; 615 continue;
607 616