Messages in this thread | | | Date | Sun, 7 Nov 2010 21:41:53 +0100 | From | Andi Kleen <> | Subject | Re: [PATCH] Greatly improve TSC calibration using a delayed workqueue |
| |
Hi John,
> + /* > + * Since the timer is started early in boot, we may be > + * delayed the first time we expire. So set the timer > + * again once we know timers are working. > + */ > + if (tsc_start == -1) { > + /* > + * Only set hpet once, to avoid mixing hardware > + * if the hpet becomes enabled later. > + */ > + hpet = is_hpet_enabled(); > + schedule_delayed_work(&tsc_irqwork, HZ); > + tsc_start = tsc_read_refs(&ref_start, hpet); > + return; > + } > + > + tsc_stop = tsc_read_refs(&ref_stop, hpet);
The HPET init code stops, starts the HPET. I think you need some way to protect against that here, e.g. a variable and rearming the timer if it's true.
Another issue may be races against suspend, but that may be too obscure.
I also worry a bit about NMIs etc. running later during this and messing up the measurement, but I guess the longer period makes up for it.
The rest of the patch looks ok to me.
-Andi
| |