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
|  |