Can you check the patch I just sent out?
It loops for a _very_ short timeout, but on the other hand it should also
absolutely immediately notice that it's getting the wrong expected values
under virtualization, and the fast case will then fail early.
It then falls back on the slow case, but I don't think you can avoid that
under virtualization.
I would not mind at all having the more precise thing happen _later_,
especially if we can do it incrementally.
One of the problems with the TSC calibration is that we need it fairly
early (for things like usleep()), and it needs to be in the right
ballpark. It definitely does not need to be in the parts-per-million
range, it needs to be in the "within a few percent" range.
(To make matters worse, the TSC isn't then even used in practice for
real-time clocks, because of variable frequency and/or halting in idle
states. So the actual real-time clock will actually be based on HPET or
PM_TIMER anyway most of the time).
Linus
--