Re: [RFC PATCH v2 12/14] x86/watchdog/hardlockup/hpet: Determine if HPET timer caused NMI

From: Thomas Gleixner
Date: Tue Mar 26 2019 - 16:55:46 EST


On Wed, 27 Feb 2019, Ricardo Neri wrote:
> @@ -62,7 +67,18 @@ static inline void set_comparator(struct hpet_hld_data *hdata,
> static void kick_timer(struct hpet_hld_data *hdata, bool force)
> {
> bool kick_needed = force || !(hdata->flags & HPET_DEV_PERI_CAP);
> - unsigned long new_compare, count;
> + unsigned long tsc_curr, tsc_delta, new_compare, count;
> +
> + /* Start obtaining the current TSC and HPET counts. */
> + tsc_curr = rdtsc();
> +
> + if (kick_needed)
> + count = get_count();

Can you please keep the TSC code in one block and the HPET block in the
next one? Having this inbetween is really bad to follow.

It really does not matter whether you read the HPET counter before or after
the calculation. This is a crystal ball estimation anyway so a few cyles
more or less are completely irrelevant.

> + tsc_delta = (unsigned long)watchdog_thresh * (unsigned long)tsc_khz
> + * 1000L;
> + hdata->tsc_next = tsc_curr + tsc_delta;
> + hdata->tsc_next_error = tsc_delta >> 6;

Thanks,

tglx