Re: [PATCH] Greatly improve TSC calibration using a delayedworkqueue

From: Andi Kleen
Date: Sun Nov 07 2010 - 15:42:00 EST


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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/