Messages in this thread | | | Date | Sat, 15 Mar 2008 05:50:02 +0100 (CET) | From | Roman Zippel <> | Subject | Re: [PATCH 2/5] introduce CLOCK_MONOTONIC_RAW |
| |
Hi,
On Fri, 14 Mar 2008, john stultz wrote:
> My solution is to introduce CLOCK_MONOTONIC_RAW. This exposes a > nanosecond based time value, that increments starting at bootup and has > no frequency adjustments made to it what so ever.
A general comment: the raw clock doesn't need any adjustments, so updates don't have to be done that frequently and you can move most of that logic into second_overflow().
> @@ -439,6 +475,7 @@ static void clocksource_adjust(s64 offset) > void update_wall_time(void) > { > cycle_t offset; > + static u64 raw_snsec; /* shifted raw nanosecnds */ > > /* Make sure we're fully resumed: */ > if (unlikely(timekeeping_suspended))
IMO that's really a clock property, so this belongs in the clock structure. (Some day we may want to have multiple active clocks for various purposes and thus export multiple raw clocks.)
> @@ -466,6 +504,11 @@ void update_wall_time(void) > second_overflow(); > } > > + if (raw_snsec >= (u64)NSEC_PER_SEC << clock->shift) { > + raw_snsec -= (u64)NSEC_PER_SEC << clock->shift; > + monotonic_raw.tv_sec++; > + } > +
You don't really have to use clock->shift as a scale, thus simplifying the shifting here (e.g. by using NTP_SCALE_SHIFT). I'm thinking about doing this for e.g. xtime_nsec as well.
bye, Roman
| |