RE: [PATCH 3/5] Add calls to translate Always Running Timer (ART) to system time

From: Hall, Christopher S
Date: Tue Jul 28 2015 - 22:05:19 EST




> -----Original Message-----
> From: John Stultz [mailto:john.stultz@xxxxxxxxxx]
> Sent: Monday, July 27, 2015 9:11 PM
> To: Hall, Christopher S
> Cc: Thomas Gleixner; Richard Cochran; Ingo Molnar; Kirsher, Jeffrey T;
> Ronciak, John; H. Peter Anvin; x86@xxxxxxxxxx; lkml;
> netdev@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH 3/5] Add calls to translate Always Running Timer
> (ART) to system time
>
> On Mon, Jul 27, 2015 at 5:46 PM, Christopher Hall
> <christopher.s.hall@xxxxxxxxx> wrote:
> > +static bool checked_art_to_tsc(cycle_t *tsc)
> > +{
> > + if (!has_art())
> > + return false;
> > + *tsc = art_to_tsc(*tsc);
> > + return true;
> > +}
> > +
> > +static int art_to_rawmono64(struct timespec64 *rawmono, cycle_t art)
> > +{
> > + if (!checked_art_to_tsc(&art))
> > + return -ENXIO;
> > + return tsc_to_rawmono64(rawmono, art);
> > +}
> > +EXPORT_SYMBOL(art_to_rawmono64);
>
> This all seems to assume the TSC is the current clocksource, which it
> may not be if the user has overridden it.

I don't make that assumption. The counter_to_* functions take a
pointer to a clocksource struct. They return -ENXIO if that clocksource
doesnât match the current clocksource.

The tsc_to_* functions pass the tsc clocksource pointer to the counter_to_*
functions. These tsc conversion functions are called by the art_to_*
functions.

>
> If instead there were a counter_to_rawmono64() which took the counter
> value and maybe the name of the clocksource (if the strncmp is
> affordable for your use), it might be easier for the core to provide
> an error if the current timekeeping clocksource isn't the one the
> counter value is based on. This would also allow the tsc_to_*()
> midlayers to be dropped (since they don't seem to do much).
>
> thanks
> -john

Again, thanks for your input.

Chris