CREDITS: correct Mikael Pettersson's URL
[linux-2.6-block.git] / kernel / time.c
CommitLineData
1da177e4
LT
1/*
2 * linux/kernel/time.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 *
6 * This file contains the interface functions for the various
7 * time related system calls: time, stime, gettimeofday, settimeofday,
8 * adjtime
9 */
10/*
11 * Modification history kernel/time.c
12 *
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
28 */
29
30#include <linux/module.h>
31#include <linux/timex.h>
c59ede7b 32#include <linux/capability.h>
1da177e4 33#include <linux/errno.h>
1da177e4
LT
34#include <linux/syscalls.h>
35#include <linux/security.h>
36#include <linux/fs.h>
37#include <linux/module.h>
38
39#include <asm/uaccess.h>
40#include <asm/unistd.h>
41
42/*
43 * The timezone where the local system is located. Used as a default by some
44 * programs who obtain this value by using gettimeofday.
45 */
46struct timezone sys_tz;
47
48EXPORT_SYMBOL(sys_tz);
49
50#ifdef __ARCH_WANT_SYS_TIME
51
52/*
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).
57 */
58asmlinkage long sys_time(time_t __user * tloc)
59{
20082208
LT
60 time_t i;
61 struct timespec tv;
1da177e4 62
20082208
LT
63 getnstimeofday(&tv);
64 i = tv.tv_sec;
1da177e4
LT
65
66 if (tloc) {
20082208 67 if (put_user(i,tloc))
1da177e4
LT
68 i = -EFAULT;
69 }
70 return i;
71}
72
73/*
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).
78 */
79
80asmlinkage long sys_stime(time_t __user *tptr)
81{
82 struct timespec tv;
83 int err;
84
85 if (get_user(tv.tv_sec, tptr))
86 return -EFAULT;
87
88 tv.tv_nsec = 0;
89
90 err = security_settime(&tv, NULL);
91 if (err)
92 return err;
93
94 do_settimeofday(&tv);
95 return 0;
96}
97
98#endif /* __ARCH_WANT_SYS_TIME */
99
100asmlinkage long sys_gettimeofday(struct timeval __user *tv, struct timezone __user *tz)
101{
102 if (likely(tv != NULL)) {
103 struct timeval ktv;
104 do_gettimeofday(&ktv);
105 if (copy_to_user(tv, &ktv, sizeof(ktv)))
106 return -EFAULT;
107 }
108 if (unlikely(tz != NULL)) {
109 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
110 return -EFAULT;
111 }
112 return 0;
113}
114
115/*
116 * Adjust the time obtained from the CMOS to be UTC time instead of
117 * local time.
118 *
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....
124 *
125 * - TYT, 1992-01-01
126 *
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.
130 */
77933d72 131static inline void warp_clock(void)
1da177e4
LT
132{
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;
1da177e4
LT
136 write_sequnlock_irq(&xtime_lock);
137 clock_was_set();
138}
139
140/*
141 * In case for some reason the CMOS clock has not already been running
142 * in UTC, but in some local time: The first time we set the timezone,
143 * we will warp the clock so that it is ticking UTC time instead of
144 * local time. Presumably, if someone is setting the timezone then we
145 * are running in an environment where the programs understand about
146 * timezones. This should be done at boot time in the /etc/rc script,
147 * as soon as possible, so that the clock can be set right. Otherwise,
148 * various programs will get confused when the clock gets warped.
149 */
150
151int do_sys_settimeofday(struct timespec *tv, struct timezone *tz)
152{
153 static int firsttime = 1;
154 int error = 0;
155
951069e3 156 if (tv && !timespec_valid(tv))
718bcceb
TG
157 return -EINVAL;
158
1da177e4
LT
159 error = security_settime(tv, tz);
160 if (error)
161 return error;
162
163 if (tz) {
164 /* SMP safe, global irq locking makes it work. */
165 sys_tz = *tz;
166 if (firsttime) {
167 firsttime = 0;
168 if (!tv)
169 warp_clock();
170 }
171 }
172 if (tv)
173 {
174 /* SMP safe, again the code in arch/foo/time.c should
175 * globally block out interrupts when it runs.
176 */
177 return do_settimeofday(tv);
178 }
179 return 0;
180}
181
182asmlinkage long sys_settimeofday(struct timeval __user *tv,
183 struct timezone __user *tz)
184{
185 struct timeval user_tv;
186 struct timespec new_ts;
187 struct timezone new_tz;
188
189 if (tv) {
190 if (copy_from_user(&user_tv, tv, sizeof(*tv)))
191 return -EFAULT;
192 new_ts.tv_sec = user_tv.tv_sec;
193 new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
194 }
195 if (tz) {
196 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
197 return -EFAULT;
198 }
199
200 return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
201}
202
1da177e4
LT
203asmlinkage long sys_adjtimex(struct timex __user *txc_p)
204{
205 struct timex txc; /* Local copy of parameter */
206 int ret;
207
208 /* Copy the user data space into the kernel copy
209 * structure. But bear in mind that the structures
210 * may change
211 */
212 if(copy_from_user(&txc, txc_p, sizeof(struct timex)))
213 return -EFAULT;
214 ret = do_adjtimex(&txc);
215 return copy_to_user(txc_p, &txc, sizeof(struct timex)) ? -EFAULT : ret;
216}
217
1da177e4
LT
218/**
219 * current_fs_time - Return FS time
220 * @sb: Superblock.
221 *
8ba8e95e 222 * Return the current time truncated to the time granularity supported by
1da177e4
LT
223 * the fs.
224 */
225struct timespec current_fs_time(struct super_block *sb)
226{
227 struct timespec now = current_kernel_time();
228 return timespec_trunc(now, sb->s_time_gran);
229}
230EXPORT_SYMBOL(current_fs_time);
231
753e9c5c
ED
232/*
233 * Convert jiffies to milliseconds and back.
234 *
235 * Avoid unnecessary multiplications/divisions in the
236 * two most common HZ cases:
237 */
238unsigned int inline jiffies_to_msecs(const unsigned long j)
239{
240#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
241 return (MSEC_PER_SEC / HZ) * j;
242#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
243 return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
244#else
245 return (j * MSEC_PER_SEC) / HZ;
246#endif
247}
248EXPORT_SYMBOL(jiffies_to_msecs);
249
250unsigned int inline jiffies_to_usecs(const unsigned long j)
251{
252#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
253 return (USEC_PER_SEC / HZ) * j;
254#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
255 return (j + (HZ / USEC_PER_SEC) - 1)/(HZ / USEC_PER_SEC);
256#else
257 return (j * USEC_PER_SEC) / HZ;
258#endif
259}
260EXPORT_SYMBOL(jiffies_to_usecs);
261
1da177e4 262/**
8ba8e95e 263 * timespec_trunc - Truncate timespec to a granularity
1da177e4 264 * @t: Timespec
8ba8e95e 265 * @gran: Granularity in ns.
1da177e4 266 *
8ba8e95e 267 * Truncate a timespec to a granularity. gran must be smaller than a second.
1da177e4
LT
268 * Always rounds down.
269 *
270 * This function should be only used for timestamps returned by
271 * current_kernel_time() or CURRENT_TIME, not with do_gettimeofday() because
272 * it doesn't handle the better resolution of the later.
273 */
274struct timespec timespec_trunc(struct timespec t, unsigned gran)
275{
276 /*
277 * Division is pretty slow so avoid it for common cases.
278 * Currently current_kernel_time() never returns better than
279 * jiffies resolution. Exploit that.
280 */
281 if (gran <= jiffies_to_usecs(1) * 1000) {
282 /* nothing */
283 } else if (gran == 1000000000) {
284 t.tv_nsec = 0;
285 } else {
286 t.tv_nsec -= t.tv_nsec % gran;
287 }
288 return t;
289}
290EXPORT_SYMBOL(timespec_trunc);
291
cf3c769b 292#ifndef CONFIG_GENERIC_TIME
1da177e4
LT
293/*
294 * Simulate gettimeofday using do_gettimeofday which only allows a timeval
295 * and therefore only yields usec accuracy
296 */
297void getnstimeofday(struct timespec *tv)
298{
299 struct timeval x;
300
301 do_gettimeofday(&x);
302 tv->tv_sec = x.tv_sec;
303 tv->tv_nsec = x.tv_usec * NSEC_PER_USEC;
304}
c6ecf7ed 305EXPORT_SYMBOL_GPL(getnstimeofday);
1da177e4
LT
306#endif
307
753be622
TG
308/* Converts Gregorian date to seconds since 1970-01-01 00:00:00.
309 * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
310 * => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
311 *
312 * [For the Julian calendar (which was used in Russia before 1917,
313 * Britain & colonies before 1752, anywhere else before 1582,
314 * and is still in use by some communities) leave out the
315 * -year/100+year/400 terms, and add 10.]
316 *
317 * This algorithm was first published by Gauss (I think).
318 *
319 * WARNING: this function will overflow on 2106-02-07 06:28:16 on
320 * machines were long is 32-bit! (However, as time_t is signed, we
321 * will already get problems at other places on 2038-01-19 03:14:08)
322 */
323unsigned long
f4818900
IM
324mktime(const unsigned int year0, const unsigned int mon0,
325 const unsigned int day, const unsigned int hour,
326 const unsigned int min, const unsigned int sec)
753be622 327{
f4818900
IM
328 unsigned int mon = mon0, year = year0;
329
330 /* 1..12 -> 11,12,1..10 */
331 if (0 >= (int) (mon -= 2)) {
332 mon += 12; /* Puts Feb last since it has leap day */
753be622
TG
333 year -= 1;
334 }
335
336 return ((((unsigned long)
337 (year/4 - year/100 + year/400 + 367*mon/12 + day) +
338 year*365 - 719499
339 )*24 + hour /* now have hours */
340 )*60 + min /* now have minutes */
341 )*60 + sec; /* finally seconds */
342}
343
199e7056
AM
344EXPORT_SYMBOL(mktime);
345
753be622
TG
346/**
347 * set_normalized_timespec - set timespec sec and nsec parts and normalize
348 *
349 * @ts: pointer to timespec variable to be set
350 * @sec: seconds to set
351 * @nsec: nanoseconds to set
352 *
353 * Set seconds and nanoseconds field of a timespec variable and
354 * normalize to the timespec storage format
355 *
356 * Note: The tv_nsec part is always in the range of
357 * 0 <= tv_nsec < NSEC_PER_SEC
358 * For negative values only the tv_sec field is negative !
359 */
f4818900 360void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec)
753be622
TG
361{
362 while (nsec >= NSEC_PER_SEC) {
363 nsec -= NSEC_PER_SEC;
364 ++sec;
365 }
366 while (nsec < 0) {
367 nsec += NSEC_PER_SEC;
368 --sec;
369 }
370 ts->tv_sec = sec;
371 ts->tv_nsec = nsec;
372}
373
f8f46da3
TG
374/**
375 * ns_to_timespec - Convert nanoseconds to timespec
376 * @nsec: the nanoseconds value to be converted
377 *
378 * Returns the timespec representation of the nsec parameter.
379 */
df869b63 380struct timespec ns_to_timespec(const s64 nsec)
f8f46da3
TG
381{
382 struct timespec ts;
383
88fc3897
GA
384 if (!nsec)
385 return (struct timespec) {0, 0};
386
387 ts.tv_sec = div_long_long_rem_signed(nsec, NSEC_PER_SEC, &ts.tv_nsec);
388 if (unlikely(nsec < 0))
389 set_normalized_timespec(&ts, ts.tv_sec, ts.tv_nsec);
f8f46da3
TG
390
391 return ts;
392}
85795d64 393EXPORT_SYMBOL(ns_to_timespec);
f8f46da3
TG
394
395/**
396 * ns_to_timeval - Convert nanoseconds to timeval
397 * @nsec: the nanoseconds value to be converted
398 *
399 * Returns the timeval representation of the nsec parameter.
400 */
df869b63 401struct timeval ns_to_timeval(const s64 nsec)
f8f46da3
TG
402{
403 struct timespec ts = ns_to_timespec(nsec);
404 struct timeval tv;
405
406 tv.tv_sec = ts.tv_sec;
407 tv.tv_usec = (suseconds_t) ts.tv_nsec / 1000;
408
409 return tv;
410}
b7aa0bf7 411EXPORT_SYMBOL(ns_to_timeval);
f8f46da3 412
41cf5445
IM
413/*
414 * When we convert to jiffies then we interpret incoming values
415 * the following way:
416 *
417 * - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
418 *
419 * - 'too large' values [that would result in larger than
420 * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
421 *
422 * - all other values are converted to jiffies by either multiplying
423 * the input value by a factor or dividing it with a factor
424 *
425 * We must also be careful about 32-bit overflows.
426 */
8b9365d7
IM
427unsigned long msecs_to_jiffies(const unsigned int m)
428{
41cf5445
IM
429 /*
430 * Negative value, means infinite timeout:
431 */
432 if ((int)m < 0)
8b9365d7 433 return MAX_JIFFY_OFFSET;
41cf5445 434
8b9365d7 435#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
41cf5445
IM
436 /*
437 * HZ is equal to or smaller than 1000, and 1000 is a nice
438 * round multiple of HZ, divide with the factor between them,
439 * but round upwards:
440 */
8b9365d7
IM
441 return (m + (MSEC_PER_SEC / HZ) - 1) / (MSEC_PER_SEC / HZ);
442#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
41cf5445
IM
443 /*
444 * HZ is larger than 1000, and HZ is a nice round multiple of
445 * 1000 - simply multiply with the factor between them.
446 *
447 * But first make sure the multiplication result cannot
448 * overflow:
449 */
450 if (m > jiffies_to_msecs(MAX_JIFFY_OFFSET))
451 return MAX_JIFFY_OFFSET;
452
8b9365d7
IM
453 return m * (HZ / MSEC_PER_SEC);
454#else
41cf5445
IM
455 /*
456 * Generic case - multiply, round and divide. But first
457 * check that if we are doing a net multiplication, that
458 * we wouldnt overflow:
459 */
460 if (HZ > MSEC_PER_SEC && m > jiffies_to_msecs(MAX_JIFFY_OFFSET))
461 return MAX_JIFFY_OFFSET;
462
8b9365d7
IM
463 return (m * HZ + MSEC_PER_SEC - 1) / MSEC_PER_SEC;
464#endif
465}
466EXPORT_SYMBOL(msecs_to_jiffies);
467
468unsigned long usecs_to_jiffies(const unsigned int u)
469{
470 if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
471 return MAX_JIFFY_OFFSET;
472#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
473 return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ);
474#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
475 return u * (HZ / USEC_PER_SEC);
476#else
477 return (u * HZ + USEC_PER_SEC - 1) / USEC_PER_SEC;
478#endif
479}
480EXPORT_SYMBOL(usecs_to_jiffies);
481
482/*
483 * The TICK_NSEC - 1 rounds up the value to the next resolution. Note
484 * that a remainder subtract here would not do the right thing as the
485 * resolution values don't fall on second boundries. I.e. the line:
486 * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding.
487 *
488 * Rather, we just shift the bits off the right.
489 *
490 * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec
491 * value to a scaled second value.
492 */
493unsigned long
494timespec_to_jiffies(const struct timespec *value)
495{
496 unsigned long sec = value->tv_sec;
497 long nsec = value->tv_nsec + TICK_NSEC - 1;
498
499 if (sec >= MAX_SEC_IN_JIFFIES){
500 sec = MAX_SEC_IN_JIFFIES;
501 nsec = 0;
502 }
503 return (((u64)sec * SEC_CONVERSION) +
504 (((u64)nsec * NSEC_CONVERSION) >>
505 (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC;
506
507}
508EXPORT_SYMBOL(timespec_to_jiffies);
509
510void
511jiffies_to_timespec(const unsigned long jiffies, struct timespec *value)
512{
513 /*
514 * Convert jiffies to nanoseconds and separate with
515 * one divide.
516 */
517 u64 nsec = (u64)jiffies * TICK_NSEC;
518 value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_nsec);
519}
520EXPORT_SYMBOL(jiffies_to_timespec);
521
522/* Same for "timeval"
523 *
524 * Well, almost. The problem here is that the real system resolution is
525 * in nanoseconds and the value being converted is in micro seconds.
526 * Also for some machines (those that use HZ = 1024, in-particular),
527 * there is a LARGE error in the tick size in microseconds.
528
529 * The solution we use is to do the rounding AFTER we convert the
530 * microsecond part. Thus the USEC_ROUND, the bits to be shifted off.
531 * Instruction wise, this should cost only an additional add with carry
532 * instruction above the way it was done above.
533 */
534unsigned long
535timeval_to_jiffies(const struct timeval *value)
536{
537 unsigned long sec = value->tv_sec;
538 long usec = value->tv_usec;
539
540 if (sec >= MAX_SEC_IN_JIFFIES){
541 sec = MAX_SEC_IN_JIFFIES;
542 usec = 0;
543 }
544 return (((u64)sec * SEC_CONVERSION) +
545 (((u64)usec * USEC_CONVERSION + USEC_ROUND) >>
546 (USEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC;
547}
456a09dc 548EXPORT_SYMBOL(timeval_to_jiffies);
8b9365d7
IM
549
550void jiffies_to_timeval(const unsigned long jiffies, struct timeval *value)
551{
552 /*
553 * Convert jiffies to nanoseconds and separate with
554 * one divide.
555 */
556 u64 nsec = (u64)jiffies * TICK_NSEC;
557 long tv_usec;
558
559 value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &tv_usec);
560 tv_usec /= NSEC_PER_USEC;
561 value->tv_usec = tv_usec;
562}
456a09dc 563EXPORT_SYMBOL(jiffies_to_timeval);
8b9365d7
IM
564
565/*
566 * Convert jiffies/jiffies_64 to clock_t and back.
567 */
568clock_t jiffies_to_clock_t(long x)
569{
570#if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
571 return x / (HZ / USER_HZ);
572#else
573 u64 tmp = (u64)x * TICK_NSEC;
574 do_div(tmp, (NSEC_PER_SEC / USER_HZ));
575 return (long)tmp;
576#endif
577}
578EXPORT_SYMBOL(jiffies_to_clock_t);
579
580unsigned long clock_t_to_jiffies(unsigned long x)
581{
582#if (HZ % USER_HZ)==0
583 if (x >= ~0UL / (HZ / USER_HZ))
584 return ~0UL;
585 return x * (HZ / USER_HZ);
586#else
587 u64 jif;
588
589 /* Don't worry about loss of precision here .. */
590 if (x >= ~0UL / HZ * USER_HZ)
591 return ~0UL;
592
593 /* .. but do try to contain it here */
594 jif = x * (u64) HZ;
595 do_div(jif, USER_HZ);
596 return jif;
597#endif
598}
599EXPORT_SYMBOL(clock_t_to_jiffies);
600
601u64 jiffies_64_to_clock_t(u64 x)
602{
603#if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
604 do_div(x, HZ / USER_HZ);
605#else
606 /*
607 * There are better ways that don't overflow early,
608 * but even this doesn't overflow in hundreds of years
609 * in 64 bits, so..
610 */
611 x *= TICK_NSEC;
612 do_div(x, (NSEC_PER_SEC / USER_HZ));
613#endif
614 return x;
615}
616
617EXPORT_SYMBOL(jiffies_64_to_clock_t);
618
619u64 nsec_to_clock_t(u64 x)
620{
621#if (NSEC_PER_SEC % USER_HZ) == 0
622 do_div(x, (NSEC_PER_SEC / USER_HZ));
623#elif (USER_HZ % 512) == 0
624 x *= USER_HZ/512;
625 do_div(x, (NSEC_PER_SEC / 512));
626#else
627 /*
628 * max relative error 5.7e-8 (1.8s per year) for USER_HZ <= 1024,
629 * overflow after 64.99 years.
630 * exact for HZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
631 */
632 x *= 9;
633 do_div(x, (unsigned long)((9ull * NSEC_PER_SEC + (USER_HZ/2)) /
634 USER_HZ));
635#endif
636 return x;
637}
638
1da177e4
LT
639#if (BITS_PER_LONG < 64)
640u64 get_jiffies_64(void)
641{
642 unsigned long seq;
643 u64 ret;
644
645 do {
646 seq = read_seqbegin(&xtime_lock);
647 ret = jiffies_64;
648 } while (read_seqretry(&xtime_lock, seq));
649 return ret;
650}
651
652EXPORT_SYMBOL(get_jiffies_64);
653#endif
654
655EXPORT_SYMBOL(jiffies);