diff options
Diffstat (limited to 'arch/x86/kernel/tsc.c')
| -rw-r--r-- | arch/x86/kernel/tsc.c | 11 |
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 | ||
