Re: [PATCH V8 02/13] ntp: add ADJ_SETOFFSET mode bit
flat view
From: Kuwahara,T. <hidden>
Date: 2011-01-11 20:32:46
Also in:
lkml, netdev
On Tue, Jan 11, 2011 at 6:06 AM, john stultz [off-list ref] wrote:
On Tue, 2011-01-11 at 05:45 +0900, Kuwahara,T. wrote:quoted
On Tue, Jan 11, 2011 at 1:49 AM, john stultz [off-list ref] wrote:quoted
Leapsecond processing is done via an absolute hrtimer. Thus when the time offset is set, the hrtimers that should have expired will fire (just like with settimeofday) and the adjustment will then be made.How do you convert relative time to absolute time? It's not trivial because TAI offset is also a variable.I don't believe I understand what you're getting at. The proposed interface is almost identical in functionality to a userland application doing the following: offset = my_calculate_offset(); clock_gettime(CLOCK_REALTIME, &now); newtime = my_add_ts(now, offset); settimeofday(&newtime, 0); The only difference is that you avoid the error from the delay between the gettime call and the settime call. It just adds the offset directly to the CLOCK_REALTIME.
For example, what time was it 3 seconds after 2008-12-31 23:59:59? You may say, of course it's 2009-01-01 00:00:02. But it's not true. You wonder why? Because a leap second had been added at midnight. unix time UTC offset ---------- -------- --- 1230767997 23:59:57 -2 1230767998 23:59:58 -1 1230767999 23:59:59 0 1230768000 23:59:60 1 (leap second) 1230768000 00:00:00 2 1230768001 00:00:01 3 1230768002 00:00:02 4 That's why I said it's not trivial, and that your patch is broken and thus useless. Unfortunately, there's no remedy for this as long as a nonlinear timescale such as the unix time is being used, since the leap second insertion/deletion is a non-deterministic event.