> -----Original Message----- > From: John Stultz [mailto:john.stu...@linaro.org] > 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; x...@kernel.org; lkml; > net...@vger.kernel.org > 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.h...@intel.com> 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