4 * Copyright (C) 1991, 1992 Linus Torvalds
6 * This file contains the interface functions for the various
7 * time related system calls: time, stime, gettimeofday, settimeofday,
11 * Modification history kernel/time.c
13 * 1993-09-02 Philip Gladstone
14 * Created file with time related functions from sched.c and adjtimex()
15 * 1993-10-08 Torsten Duwe
16 * adjtime interface update and CMOS clock write code
17 * 1995-08-13 Torsten Duwe
18 * kernel PLL updated to 1994-12-13 specs (rfc-1589)
19 * 1999-01-16 Ulrich Windl
20 * Introduced error checking for many cases in adjtimex().
21 * Updated NTP code according to technical memorandum Jan '96
22 * "A Kernel Model for Precision Timekeeping" by Dave Mills
23 * Allow time_constant larger than MAXTC(6) for NTP v4 (MAXTC == 10)
24 * (Even though the technical memorandum forbids it)
25 * 2004-07-14 Christoph Lameter
26 * Added getnstimeofday to allow the posix timer functions to return
27 * with nanosecond accuracy
30 #include <linux/module.h>
31 #include <linux/timex.h>
32 #include <linux/errno.h>
33 #include <linux/smp_lock.h>
34 #include <asm/uaccess.h>
35 #include <asm/unistd.h>
38 * The timezone where the local system is located. Used as a default by some
39 * programs who obtain this value by using gettimeofday.
41 struct timezone sys_tz
;
43 EXPORT_SYMBOL(sys_tz
);
45 #ifdef __ARCH_WANT_SYS_TIME
48 * sys_time() can be implemented in user-level using
49 * sys_gettimeofday(). Is this for backwards compatibility? If so,
50 * why not move it into the appropriate arch directory (for those
51 * architectures that need it).
53 * XXX This function is NOT 64-bit clean!
55 asmlinkage
long sys_time(int __user
* tloc
)
71 * sys_stime() can be implemented in user-level using
72 * sys_settimeofday(). Is this for backwards compatibility? If so,
73 * why not move it into the appropriate arch directory (for those
74 * architectures that need it).
77 asmlinkage
long sys_stime(time_t __user
*tptr
)
81 if (!capable(CAP_SYS_TIME
))
83 if (get_user(tv
.tv_sec
, tptr
))
91 #endif /* __ARCH_WANT_SYS_TIME */
93 asmlinkage
long sys_gettimeofday(struct timeval __user
*tv
, struct timezone __user
*tz
)
95 if (likely(tv
!= NULL
)) {
97 do_gettimeofday(&ktv
);
98 if (copy_to_user(tv
, &ktv
, sizeof(ktv
)))
101 if (unlikely(tz
!= NULL
)) {
102 if (copy_to_user(tz
, &sys_tz
, sizeof(sys_tz
)))
109 * Adjust the time obtained from the CMOS to be UTC time instead of
112 * This is ugly, but preferable to the alternatives. Otherwise we
113 * would either need to write a program to do it in /etc/rc (and risk
114 * confusion if the program gets run more than once; it would also be
115 * hard to make the program warp the clock precisely n hours) or
116 * compile in the timezone information into the kernel. Bad, bad....
120 * The best thing to do is to keep the CMOS clock in universal time (UTC)
121 * as real UNIX machines always do it. This avoids all headaches about
122 * daylight saving times and warping kernel clocks.
124 inline static void warp_clock(void)
126 write_seqlock_irq(&xtime_lock
);
127 wall_to_monotonic
.tv_sec
-= sys_tz
.tz_minuteswest
* 60;
128 xtime
.tv_sec
+= sys_tz
.tz_minuteswest
* 60;
129 time_interpolator_reset();
130 write_sequnlock_irq(&xtime_lock
);
135 * In case for some reason the CMOS clock has not already been running
136 * in UTC, but in some local time: The first time we set the timezone,
137 * we will warp the clock so that it is ticking UTC time instead of
138 * local time. Presumably, if someone is setting the timezone then we
139 * are running in an environment where the programs understand about
140 * timezones. This should be done at boot time in the /etc/rc script,
141 * as soon as possible, so that the clock can be set right. Otherwise,
142 * various programs will get confused when the clock gets warped.
145 int do_sys_settimeofday(struct timespec
*tv
, struct timezone
*tz
)
147 static int firsttime
= 1;
149 if (!capable(CAP_SYS_TIME
))
153 /* SMP safe, global irq locking makes it work. */
163 /* SMP safe, again the code in arch/foo/time.c should
164 * globally block out interrupts when it runs.
166 return do_settimeofday(tv
);
171 asmlinkage
long sys_settimeofday(struct timeval __user
*tv
,
172 struct timezone __user
*tz
)
174 struct timeval user_tv
;
175 struct timespec new_ts
;
176 struct timezone new_tz
;
179 if (copy_from_user(&user_tv
, tv
, sizeof(*tv
)))
181 new_ts
.tv_sec
= user_tv
.tv_sec
;
182 new_ts
.tv_nsec
= user_tv
.tv_usec
* NSEC_PER_USEC
;
185 if (copy_from_user(&new_tz
, tz
, sizeof(*tz
)))
189 return do_sys_settimeofday(tv
? &new_ts
: NULL
, tz
? &new_tz
: NULL
);
192 long pps_offset
; /* pps time offset (us) */
193 long pps_jitter
= MAXTIME
; /* time dispersion (jitter) (us) */
195 long pps_freq
; /* frequency offset (scaled ppm) */
196 long pps_stabil
= MAXFREQ
; /* frequency dispersion (scaled ppm) */
198 long pps_valid
= PPS_VALID
; /* pps signal watchdog counter */
200 int pps_shift
= PPS_SHIFT
; /* interval duration (s) (shift) */
202 long pps_jitcnt
; /* jitter limit exceeded */
203 long pps_calcnt
; /* calibration intervals */
204 long pps_errcnt
; /* calibration errors */
205 long pps_stbcnt
; /* stability limit exceeded */
207 /* hook for a loadable hardpps kernel module */
208 void (*hardpps_ptr
)(struct timeval
*);
210 /* adjtimex mainly allows reading (and writing, if superuser) of
211 * kernel time-keeping variables. used by xntpd.
213 int do_adjtimex(struct timex
*txc
)
215 long ltemp
, mtemp
, save_adjust
;
218 /* In order to modify anything, you gotta be super-user! */
219 if (txc
->modes
&& !capable(CAP_SYS_TIME
))
222 /* Now we validate the data before disabling interrupts */
224 if ((txc
->modes
& ADJ_OFFSET_SINGLESHOT
) == ADJ_OFFSET_SINGLESHOT
)
225 /* singleshot must not be used with any other mode bits */
226 if (txc
->modes
!= ADJ_OFFSET_SINGLESHOT
)
229 if (txc
->modes
!= ADJ_OFFSET_SINGLESHOT
&& (txc
->modes
& ADJ_OFFSET
))
230 /* adjustment Offset limited to +- .512 seconds */
231 if (txc
->offset
<= - MAXPHASE
|| txc
->offset
>= MAXPHASE
)
234 /* if the quartz is off by more than 10% something is VERY wrong ! */
235 if (txc
->modes
& ADJ_TICK
)
236 if (txc
->tick
< 900000/USER_HZ
||
237 txc
->tick
> 1100000/USER_HZ
)
240 write_seqlock_irq(&xtime_lock
);
241 result
= time_state
; /* mostly `TIME_OK' */
243 /* Save for later - semantics of adjtime is to return old value */
244 save_adjust
= time_next_adjust
? time_next_adjust
: time_adjust
;
246 #if 0 /* STA_CLOCKERR is never set yet */
247 time_status
&= ~STA_CLOCKERR
; /* reset STA_CLOCKERR */
249 /* If there are input parameters, then process them */
252 if (txc
->modes
& ADJ_STATUS
) /* only set allowed bits */
253 time_status
= (txc
->status
& ~STA_RONLY
) |
254 (time_status
& STA_RONLY
);
256 if (txc
->modes
& ADJ_FREQUENCY
) { /* p. 22 */
257 if (txc
->freq
> MAXFREQ
|| txc
->freq
< -MAXFREQ
) {
261 time_freq
= txc
->freq
- pps_freq
;
264 if (txc
->modes
& ADJ_MAXERROR
) {
265 if (txc
->maxerror
< 0 || txc
->maxerror
>= NTP_PHASE_LIMIT
) {
269 time_maxerror
= txc
->maxerror
;
272 if (txc
->modes
& ADJ_ESTERROR
) {
273 if (txc
->esterror
< 0 || txc
->esterror
>= NTP_PHASE_LIMIT
) {
277 time_esterror
= txc
->esterror
;
280 if (txc
->modes
& ADJ_TIMECONST
) { /* p. 24 */
281 if (txc
->constant
< 0) { /* NTP v4 uses values > 6 */
285 time_constant
= txc
->constant
;
288 if (txc
->modes
& ADJ_OFFSET
) { /* values checked earlier */
289 if (txc
->modes
== ADJ_OFFSET_SINGLESHOT
) {
290 /* adjtime() is independent from ntp_adjtime() */
291 if ((time_next_adjust
= txc
->offset
) == 0)
294 else if ( time_status
& (STA_PLL
| STA_PPSTIME
) ) {
295 ltemp
= (time_status
& (STA_PPSTIME
| STA_PPSSIGNAL
)) ==
296 (STA_PPSTIME
| STA_PPSSIGNAL
) ?
297 pps_offset
: txc
->offset
;
300 * Scale the phase adjustment and
301 * clamp to the operating range.
303 if (ltemp
> MAXPHASE
)
304 time_offset
= MAXPHASE
<< SHIFT_UPDATE
;
305 else if (ltemp
< -MAXPHASE
)
306 time_offset
= -(MAXPHASE
<< SHIFT_UPDATE
);
308 time_offset
= ltemp
<< SHIFT_UPDATE
;
311 * Select whether the frequency is to be controlled
312 * and in which mode (PLL or FLL). Clamp to the operating
313 * range. Ugly multiply/divide should be replaced someday.
316 if (time_status
& STA_FREQHOLD
|| time_reftime
== 0)
317 time_reftime
= xtime
.tv_sec
;
318 mtemp
= xtime
.tv_sec
- time_reftime
;
319 time_reftime
= xtime
.tv_sec
;
320 if (time_status
& STA_FLL
) {
321 if (mtemp
>= MINSEC
) {
322 ltemp
= (time_offset
/ mtemp
) << (SHIFT_USEC
-
325 time_freq
-= -ltemp
>> SHIFT_KH
;
327 time_freq
+= ltemp
>> SHIFT_KH
;
328 } else /* calibration interval too short (p. 12) */
330 } else { /* PLL mode */
331 if (mtemp
< MAXSEC
) {
334 time_freq
-= -ltemp
>> (time_constant
+
336 SHIFT_KF
- SHIFT_USEC
);
338 time_freq
+= ltemp
>> (time_constant
+
340 SHIFT_KF
- SHIFT_USEC
);
341 } else /* calibration interval too long (p. 12) */
344 if (time_freq
> time_tolerance
)
345 time_freq
= time_tolerance
;
346 else if (time_freq
< -time_tolerance
)
347 time_freq
= -time_tolerance
;
348 } /* STA_PLL || STA_PPSTIME */
349 } /* txc->modes & ADJ_OFFSET */
350 if (txc
->modes
& ADJ_TICK
) {
351 tick_usec
= txc
->tick
;
352 tick_nsec
= TICK_USEC_TO_NSEC(tick_usec
);
355 leave
: if ((time_status
& (STA_UNSYNC
|STA_CLOCKERR
)) != 0
356 || ((time_status
& (STA_PPSFREQ
|STA_PPSTIME
)) != 0
357 && (time_status
& STA_PPSSIGNAL
) == 0)
359 || ((time_status
& (STA_PPSTIME
|STA_PPSJITTER
))
360 == (STA_PPSTIME
|STA_PPSJITTER
))
362 || ((time_status
& STA_PPSFREQ
) != 0
363 && (time_status
& (STA_PPSWANDER
|STA_PPSERROR
)) != 0))
367 if ((txc
->modes
& ADJ_OFFSET_SINGLESHOT
) == ADJ_OFFSET_SINGLESHOT
)
368 txc
->offset
= save_adjust
;
371 txc
->offset
= -(-time_offset
>> SHIFT_UPDATE
);
373 txc
->offset
= time_offset
>> SHIFT_UPDATE
;
375 txc
->freq
= time_freq
+ pps_freq
;
376 txc
->maxerror
= time_maxerror
;
377 txc
->esterror
= time_esterror
;
378 txc
->status
= time_status
;
379 txc
->constant
= time_constant
;
380 txc
->precision
= time_precision
;
381 txc
->tolerance
= time_tolerance
;
382 txc
->tick
= tick_usec
;
383 txc
->ppsfreq
= pps_freq
;
384 txc
->jitter
= pps_jitter
>> PPS_AVG
;
385 txc
->shift
= pps_shift
;
386 txc
->stabil
= pps_stabil
;
387 txc
->jitcnt
= pps_jitcnt
;
388 txc
->calcnt
= pps_calcnt
;
389 txc
->errcnt
= pps_errcnt
;
390 txc
->stbcnt
= pps_stbcnt
;
391 write_sequnlock_irq(&xtime_lock
);
392 do_gettimeofday(&txc
->time
);
396 asmlinkage
long sys_adjtimex(struct timex __user
*txc_p
)
398 struct timex txc
; /* Local copy of parameter */
401 /* Copy the user data space into the kernel copy
402 * structure. But bear in mind that the structures
405 if(copy_from_user(&txc
, txc_p
, sizeof(struct timex
)))
407 ret
= do_adjtimex(&txc
);
408 return copy_to_user(txc_p
, &txc
, sizeof(struct timex
)) ? -EFAULT
: ret
;
411 struct timespec
current_kernel_time(void)
417 seq
= read_seqbegin(&xtime_lock
);
420 } while (read_seqretry(&xtime_lock
, seq
));
425 EXPORT_SYMBOL(current_kernel_time
);
427 #ifdef CONFIG_TIME_INTERPOLATION
428 void getnstimeofday (struct timespec
*tv
)
430 unsigned long seq
,sec
,nsec
;
433 seq
= read_seqbegin(&xtime_lock
);
435 nsec
= xtime
.tv_nsec
+time_interpolator_get_offset();
436 } while (unlikely(read_seqretry(&xtime_lock
, seq
)));
438 while (unlikely(nsec
>= NSEC_PER_SEC
)) {
439 nsec
-= NSEC_PER_SEC
;
446 int do_settimeofday (struct timespec
*tv
)
448 time_t wtm_sec
, sec
= tv
->tv_sec
;
449 long wtm_nsec
, nsec
= tv
->tv_nsec
;
451 if ((unsigned long)tv
->tv_nsec
>= NSEC_PER_SEC
)
454 write_seqlock_irq(&xtime_lock
);
457 * This is revolting. We need to set "xtime" correctly. However, the value
458 * in this location is the value at the most recent update of wall time.
459 * Discover what correction gettimeofday would have done, and then undo
462 nsec
-= time_interpolator_get_offset();
464 wtm_sec
= wall_to_monotonic
.tv_sec
+ (xtime
.tv_sec
- sec
);
465 wtm_nsec
= wall_to_monotonic
.tv_nsec
+ (xtime
.tv_nsec
- nsec
);
467 set_normalized_timespec(&xtime
, sec
, nsec
);
468 set_normalized_timespec(&wall_to_monotonic
, wtm_sec
, wtm_nsec
);
470 time_adjust
= 0; /* stop active adjtime() */
471 time_status
|= STA_UNSYNC
;
472 time_maxerror
= NTP_PHASE_LIMIT
;
473 time_esterror
= NTP_PHASE_LIMIT
;
474 time_interpolator_reset();
476 write_sequnlock_irq(&xtime_lock
);
481 EXPORT_SYMBOL(do_settimeofday
);
483 void do_gettimeofday (struct timeval
*tv
)
485 unsigned long seq
, nsec
, usec
, sec
, offset
;
487 seq
= read_seqbegin(&xtime_lock
);
488 offset
= time_interpolator_get_offset();
490 nsec
= xtime
.tv_nsec
;
491 } while (unlikely(read_seqretry(&xtime_lock
, seq
)));
493 usec
= (nsec
+ offset
) / 1000;
495 while (unlikely(usec
>= USEC_PER_SEC
)) {
496 usec
-= USEC_PER_SEC
;
504 EXPORT_SYMBOL(do_gettimeofday
);
509 * Simulate gettimeofday using do_gettimeofday which only allows a timeval
510 * and therefore only yields usec accuracy
512 void getnstimeofday(struct timespec
*tv
)
517 tv
->tv_sec
= x
.tv_sec
;
518 tv
->tv_nsec
= x
.tv_usec
* NSEC_PER_USEC
;
522 EXPORT_SYMBOL(getnstimeofday
);
524 #if (BITS_PER_LONG < 64)
525 u64
get_jiffies_64(void)
531 seq
= read_seqbegin(&xtime_lock
);
533 } while (read_seqretry(&xtime_lock
, seq
));
537 EXPORT_SYMBOL(get_jiffies_64
);
540 EXPORT_SYMBOL(jiffies
);