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 <linux/syscalls.h>
35 #include <linux/security.h>
37 #include <linux/module.h>
39 #include <asm/uaccess.h>
40 #include <asm/unistd.h>
43 * The timezone where the local system is located. Used as a default by some
44 * programs who obtain this value by using gettimeofday.
46 struct timezone sys_tz;
48 EXPORT_SYMBOL(sys_tz);
50 #ifdef __ARCH_WANT_SYS_TIME
53 * sys_time() can be implemented in user-level using
54 * sys_gettimeofday(). Is this for backwards compatibility? If so,
55 * why not move it into the appropriate arch directory (for those
56 * architectures that need it).
58 asmlinkage long sys_time(time_t __user * tloc)
74 * sys_stime() can be implemented in user-level using
75 * sys_settimeofday(). Is this for backwards compatibility? If so,
76 * why not move it into the appropriate arch directory (for those
77 * architectures that need it).
80 asmlinkage long sys_stime(time_t __user *tptr)
85 if (get_user(tv.tv_sec, tptr))
90 err = security_settime(&tv, NULL);
98 #endif /* __ARCH_WANT_SYS_TIME */
100 asmlinkage long sys_gettimeofday(struct timeval __user *tv, struct timezone __user *tz)
102 if (likely(tv != NULL)) {
104 do_gettimeofday(&ktv);
105 if (copy_to_user(tv, &ktv, sizeof(ktv)))
108 if (unlikely(tz != NULL)) {
109 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
116 * Adjust the time obtained from the CMOS to be UTC time instead of
119 * This is ugly, but preferable to the alternatives. Otherwise we
120 * would either need to write a program to do it in /etc/rc (and risk
121 * confusion if the program gets run more than once; it would also be
122 * hard to make the program warp the clock precisely n hours) or
123 * compile in the timezone information into the kernel. Bad, bad....
127 * The best thing to do is to keep the CMOS clock in universal time (UTC)
128 * as real UNIX machines always do it. This avoids all headaches about
129 * daylight saving times and warping kernel clocks.
131 static inline void warp_clock(void)
133 write_seqlock_irq(&xtime_lock);
134 wall_to_monotonic.tv_sec -= sys_tz.tz_minuteswest * 60;
135 xtime.tv_sec += sys_tz.tz_minuteswest * 60;
136 time_interpolator_reset();
137 write_sequnlock_irq(&xtime_lock);
142 * In case for some reason the CMOS clock has not already been running
143 * in UTC, but in some local time: The first time we set the timezone,
144 * we will warp the clock so that it is ticking UTC time instead of
145 * local time. Presumably, if someone is setting the timezone then we
146 * are running in an environment where the programs understand about
147 * timezones. This should be done at boot time in the /etc/rc script,
148 * as soon as possible, so that the clock can be set right. Otherwise,
149 * various programs will get confused when the clock gets warped.
152 int do_sys_settimeofday(struct timespec *tv, struct timezone *tz)
154 static int firsttime = 1;
157 error = security_settime(tv, tz);
162 /* SMP safe, global irq locking makes it work. */
172 /* SMP safe, again the code in arch/foo/time.c should
173 * globally block out interrupts when it runs.
175 return do_settimeofday(tv);
180 asmlinkage long sys_settimeofday(struct timeval __user *tv,
181 struct timezone __user *tz)
183 struct timeval user_tv;
184 struct timespec new_ts;
185 struct timezone new_tz;
188 if (copy_from_user(&user_tv, tv, sizeof(*tv)))
190 new_ts.tv_sec = user_tv.tv_sec;
191 new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
194 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
198 return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
201 long pps_offset; /* pps time offset (us) */
202 long pps_jitter = MAXTIME; /* time dispersion (jitter) (us) */
204 long pps_freq; /* frequency offset (scaled ppm) */
205 long pps_stabil = MAXFREQ; /* frequency dispersion (scaled ppm) */
207 long pps_valid = PPS_VALID; /* pps signal watchdog counter */
209 int pps_shift = PPS_SHIFT; /* interval duration (s) (shift) */
211 long pps_jitcnt; /* jitter limit exceeded */
212 long pps_calcnt; /* calibration intervals */
213 long pps_errcnt; /* calibration errors */
214 long pps_stbcnt; /* stability limit exceeded */
216 /* hook for a loadable hardpps kernel module */
217 void (*hardpps_ptr)(struct timeval *);
219 /* we call this to notify the arch when the clock is being
220 * controlled. If no such arch routine, do nothing.
222 void __attribute__ ((weak)) notify_arch_cmos_timer(void)
227 /* adjtimex mainly allows reading (and writing, if superuser) of
228 * kernel time-keeping variables. used by xntpd.
230 int do_adjtimex(struct timex *txc)
232 long ltemp, mtemp, save_adjust;
235 /* In order to modify anything, you gotta be super-user! */
236 if (txc->modes && !capable(CAP_SYS_TIME))
239 /* Now we validate the data before disabling interrupts */
241 if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
242 /* singleshot must not be used with any other mode bits */
243 if (txc->modes != ADJ_OFFSET_SINGLESHOT)
246 if (txc->modes != ADJ_OFFSET_SINGLESHOT && (txc->modes & ADJ_OFFSET))
247 /* adjustment Offset limited to +- .512 seconds */
248 if (txc->offset <= - MAXPHASE || txc->offset >= MAXPHASE )
251 /* if the quartz is off by more than 10% something is VERY wrong ! */
252 if (txc->modes & ADJ_TICK)
253 if (txc->tick < 900000/USER_HZ ||
254 txc->tick > 1100000/USER_HZ)
257 write_seqlock_irq(&xtime_lock);
258 result = time_state; /* mostly `TIME_OK' */
260 /* Save for later - semantics of adjtime is to return old value */
261 save_adjust = time_next_adjust ? time_next_adjust : time_adjust;
263 #if 0 /* STA_CLOCKERR is never set yet */
264 time_status &= ~STA_CLOCKERR; /* reset STA_CLOCKERR */
266 /* If there are input parameters, then process them */
269 if (txc->modes & ADJ_STATUS) /* only set allowed bits */
270 time_status = (txc->status & ~STA_RONLY) |
271 (time_status & STA_RONLY);
273 if (txc->modes & ADJ_FREQUENCY) { /* p. 22 */
274 if (txc->freq > MAXFREQ || txc->freq < -MAXFREQ) {
278 time_freq = txc->freq - pps_freq;
281 if (txc->modes & ADJ_MAXERROR) {
282 if (txc->maxerror < 0 || txc->maxerror >= NTP_PHASE_LIMIT) {
286 time_maxerror = txc->maxerror;
289 if (txc->modes & ADJ_ESTERROR) {
290 if (txc->esterror < 0 || txc->esterror >= NTP_PHASE_LIMIT) {
294 time_esterror = txc->esterror;
297 if (txc->modes & ADJ_TIMECONST) { /* p. 24 */
298 if (txc->constant < 0) { /* NTP v4 uses values > 6 */
302 time_constant = txc->constant;
305 if (txc->modes & ADJ_OFFSET) { /* values checked earlier */
306 if (txc->modes == ADJ_OFFSET_SINGLESHOT) {
307 /* adjtime() is independent from ntp_adjtime() */
308 if ((time_next_adjust = txc->offset) == 0)
311 else if ( time_status & (STA_PLL | STA_PPSTIME) ) {
312 ltemp = (time_status & (STA_PPSTIME | STA_PPSSIGNAL)) ==
313 (STA_PPSTIME | STA_PPSSIGNAL) ?
314 pps_offset : txc->offset;
317 * Scale the phase adjustment and
318 * clamp to the operating range.
320 if (ltemp > MAXPHASE)
321 time_offset = MAXPHASE << SHIFT_UPDATE;
322 else if (ltemp < -MAXPHASE)
323 time_offset = -(MAXPHASE << SHIFT_UPDATE);
325 time_offset = ltemp << SHIFT_UPDATE;
328 * Select whether the frequency is to be controlled
329 * and in which mode (PLL or FLL). Clamp to the operating
330 * range. Ugly multiply/divide should be replaced someday.
333 if (time_status & STA_FREQHOLD || time_reftime == 0)
334 time_reftime = xtime.tv_sec;
335 mtemp = xtime.tv_sec - time_reftime;
336 time_reftime = xtime.tv_sec;
337 if (time_status & STA_FLL) {
338 if (mtemp >= MINSEC) {
339 ltemp = (time_offset / mtemp) << (SHIFT_USEC -
341 time_freq += shift_right(ltemp, SHIFT_KH);
342 } else /* calibration interval too short (p. 12) */
344 } else { /* PLL mode */
345 if (mtemp < MAXSEC) {
347 time_freq += shift_right(ltemp,(time_constant +
349 SHIFT_KF - SHIFT_USEC));
350 } else /* calibration interval too long (p. 12) */
353 time_freq = min(time_freq, time_tolerance);
354 time_freq = max(time_freq, -time_tolerance);
355 } /* STA_PLL || STA_PPSTIME */
356 } /* txc->modes & ADJ_OFFSET */
357 if (txc->modes & ADJ_TICK) {
358 tick_usec = txc->tick;
359 tick_nsec = TICK_USEC_TO_NSEC(tick_usec);
362 leave: if ((time_status & (STA_UNSYNC|STA_CLOCKERR)) != 0
363 || ((time_status & (STA_PPSFREQ|STA_PPSTIME)) != 0
364 && (time_status & STA_PPSSIGNAL) == 0)
366 || ((time_status & (STA_PPSTIME|STA_PPSJITTER))
367 == (STA_PPSTIME|STA_PPSJITTER))
369 || ((time_status & STA_PPSFREQ) != 0
370 && (time_status & (STA_PPSWANDER|STA_PPSERROR)) != 0))
374 if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
375 txc->offset = save_adjust;
377 txc->offset = shift_right(time_offset, SHIFT_UPDATE);
379 txc->freq = time_freq + pps_freq;
380 txc->maxerror = time_maxerror;
381 txc->esterror = time_esterror;
382 txc->status = time_status;
383 txc->constant = time_constant;
384 txc->precision = time_precision;
385 txc->tolerance = time_tolerance;
386 txc->tick = tick_usec;
387 txc->ppsfreq = pps_freq;
388 txc->jitter = pps_jitter >> PPS_AVG;
389 txc->shift = pps_shift;
390 txc->stabil = pps_stabil;
391 txc->jitcnt = pps_jitcnt;
392 txc->calcnt = pps_calcnt;
393 txc->errcnt = pps_errcnt;
394 txc->stbcnt = pps_stbcnt;
395 write_sequnlock_irq(&xtime_lock);
396 do_gettimeofday(&txc->time);
397 notify_arch_cmos_timer();
401 asmlinkage long sys_adjtimex(struct timex __user *txc_p)
403 struct timex txc; /* Local copy of parameter */
406 /* Copy the user data space into the kernel copy
407 * structure. But bear in mind that the structures
410 if(copy_from_user(&txc, txc_p, sizeof(struct timex)))
412 ret = do_adjtimex(&txc);
413 return copy_to_user(txc_p, &txc, sizeof(struct timex)) ? -EFAULT : ret;
416 inline struct timespec current_kernel_time(void)
422 seq = read_seqbegin(&xtime_lock);
425 } while (read_seqretry(&xtime_lock, seq));
430 EXPORT_SYMBOL(current_kernel_time);
433 * current_fs_time - Return FS time
436 * Return the current time truncated to the time granuality supported by
439 struct timespec current_fs_time(struct super_block *sb)
441 struct timespec now = current_kernel_time();
442 return timespec_trunc(now, sb->s_time_gran);
444 EXPORT_SYMBOL(current_fs_time);
447 * timespec_trunc - Truncate timespec to a granuality
449 * @gran: Granuality in ns.
451 * Truncate a timespec to a granuality. gran must be smaller than a second.
452 * Always rounds down.
454 * This function should be only used for timestamps returned by
455 * current_kernel_time() or CURRENT_TIME, not with do_gettimeofday() because
456 * it doesn't handle the better resolution of the later.
458 struct timespec timespec_trunc(struct timespec t, unsigned gran)
461 * Division is pretty slow so avoid it for common cases.
462 * Currently current_kernel_time() never returns better than
463 * jiffies resolution. Exploit that.
465 if (gran <= jiffies_to_usecs(1) * 1000) {
467 } else if (gran == 1000000000) {
470 t.tv_nsec -= t.tv_nsec % gran;
474 EXPORT_SYMBOL(timespec_trunc);
476 #ifdef CONFIG_TIME_INTERPOLATION
477 void getnstimeofday (struct timespec *tv)
479 unsigned long seq,sec,nsec;
482 seq = read_seqbegin(&xtime_lock);
484 nsec = xtime.tv_nsec+time_interpolator_get_offset();
485 } while (unlikely(read_seqretry(&xtime_lock, seq)));
487 while (unlikely(nsec >= NSEC_PER_SEC)) {
488 nsec -= NSEC_PER_SEC;
494 EXPORT_SYMBOL_GPL(getnstimeofday);
496 int do_settimeofday (struct timespec *tv)
498 time_t wtm_sec, sec = tv->tv_sec;
499 long wtm_nsec, nsec = tv->tv_nsec;
501 if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
504 write_seqlock_irq(&xtime_lock);
506 wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
507 wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
509 set_normalized_timespec(&xtime, sec, nsec);
510 set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
512 time_adjust = 0; /* stop active adjtime() */
513 time_status |= STA_UNSYNC;
514 time_maxerror = NTP_PHASE_LIMIT;
515 time_esterror = NTP_PHASE_LIMIT;
516 time_interpolator_reset();
518 write_sequnlock_irq(&xtime_lock);
522 EXPORT_SYMBOL(do_settimeofday);
524 void do_gettimeofday (struct timeval *tv)
526 unsigned long seq, nsec, usec, sec, offset;
528 seq = read_seqbegin(&xtime_lock);
529 offset = time_interpolator_get_offset();
531 nsec = xtime.tv_nsec;
532 } while (unlikely(read_seqretry(&xtime_lock, seq)));
534 usec = (nsec + offset) / 1000;
536 while (unlikely(usec >= USEC_PER_SEC)) {
537 usec -= USEC_PER_SEC;
545 EXPORT_SYMBOL(do_gettimeofday);
550 * Simulate gettimeofday using do_gettimeofday which only allows a timeval
551 * and therefore only yields usec accuracy
553 void getnstimeofday(struct timespec *tv)
558 tv->tv_sec = x.tv_sec;
559 tv->tv_nsec = x.tv_usec * NSEC_PER_USEC;
561 EXPORT_SYMBOL_GPL(getnstimeofday);
564 void getnstimestamp(struct timespec *ts)
567 struct timespec wall2mono;
569 /* synchronize with settimeofday() changes */
571 seq = read_seqbegin(&xtime_lock);
573 wall2mono = wall_to_monotonic;
574 } while(unlikely(read_seqretry(&xtime_lock, seq)));
576 /* adjust to monotonicaly-increasing values */
577 ts->tv_sec += wall2mono.tv_sec;
578 ts->tv_nsec += wall2mono.tv_nsec;
579 while (unlikely(ts->tv_nsec >= NSEC_PER_SEC)) {
580 ts->tv_nsec -= NSEC_PER_SEC;
584 EXPORT_SYMBOL_GPL(getnstimestamp);
586 /* Converts Gregorian date to seconds since 1970-01-01 00:00:00.
587 * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
588 * => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
590 * [For the Julian calendar (which was used in Russia before 1917,
591 * Britain & colonies before 1752, anywhere else before 1582,
592 * and is still in use by some communities) leave out the
593 * -year/100+year/400 terms, and add 10.]
595 * This algorithm was first published by Gauss (I think).
597 * WARNING: this function will overflow on 2106-02-07 06:28:16 on
598 * machines were long is 32-bit! (However, as time_t is signed, we
599 * will already get problems at other places on 2038-01-19 03:14:08)
602 mktime(const unsigned int year0, const unsigned int mon0,
603 const unsigned int day, const unsigned int hour,
604 const unsigned int min, const unsigned int sec)
606 unsigned int mon = mon0, year = year0;
608 /* 1..12 -> 11,12,1..10 */
609 if (0 >= (int) (mon -= 2)) {
610 mon += 12; /* Puts Feb last since it has leap day */
614 return ((((unsigned long)
615 (year/4 - year/100 + year/400 + 367*mon/12 + day) +
617 )*24 + hour /* now have hours */
618 )*60 + min /* now have minutes */
619 )*60 + sec; /* finally seconds */
622 EXPORT_SYMBOL(mktime);
625 * set_normalized_timespec - set timespec sec and nsec parts and normalize
627 * @ts: pointer to timespec variable to be set
628 * @sec: seconds to set
629 * @nsec: nanoseconds to set
631 * Set seconds and nanoseconds field of a timespec variable and
632 * normalize to the timespec storage format
634 * Note: The tv_nsec part is always in the range of
635 * 0 <= tv_nsec < NSEC_PER_SEC
636 * For negative values only the tv_sec field is negative !
638 void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec)
640 while (nsec >= NSEC_PER_SEC) {
641 nsec -= NSEC_PER_SEC;
645 nsec += NSEC_PER_SEC;
652 #if (BITS_PER_LONG < 64)
653 u64 get_jiffies_64(void)
659 seq = read_seqbegin(&xtime_lock);
661 } while (read_seqretry(&xtime_lock, seq));
665 EXPORT_SYMBOL(get_jiffies_64);
668 EXPORT_SYMBOL(jiffies);