perf tools: Don't clone maps from parent when synthesizing forks
[linux/fpc-iii.git] / kernel / time / time.c
blobe3a7f7fd3abc1aaf337b18a1eb268126f4308bd2
1 /*
2 * linux/kernel/time.c
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,
8 * adjtime
9 */
11 * Modification history kernel/time.c
13 * 1993-09-02 Philip Gladstone
14 * Created file with time related functions from sched/core.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/export.h>
31 #include <linux/kernel.h>
32 #include <linux/timex.h>
33 #include <linux/capability.h>
34 #include <linux/timekeeper_internal.h>
35 #include <linux/errno.h>
36 #include <linux/syscalls.h>
37 #include <linux/security.h>
38 #include <linux/fs.h>
39 #include <linux/math64.h>
40 #include <linux/ptrace.h>
42 #include <linux/uaccess.h>
43 #include <linux/compat.h>
44 #include <asm/unistd.h>
46 #include <generated/timeconst.h>
47 #include "timekeeping.h"
50 * The timezone where the local system is located. Used as a default by some
51 * programs who obtain this value by using gettimeofday.
53 struct timezone sys_tz;
55 EXPORT_SYMBOL(sys_tz);
57 #ifdef __ARCH_WANT_SYS_TIME
60 * sys_time() can be implemented in user-level using
61 * sys_gettimeofday(). Is this for backwards compatibility? If so,
62 * why not move it into the appropriate arch directory (for those
63 * architectures that need it).
65 SYSCALL_DEFINE1(time, time_t __user *, tloc)
67 time_t i = (time_t)ktime_get_real_seconds();
69 if (tloc) {
70 if (put_user(i,tloc))
71 return -EFAULT;
73 force_successful_syscall_return();
74 return i;
78 * sys_stime() can be implemented in user-level using
79 * sys_settimeofday(). Is this for backwards compatibility? If so,
80 * why not move it into the appropriate arch directory (for those
81 * architectures that need it).
84 SYSCALL_DEFINE1(stime, time_t __user *, tptr)
86 struct timespec64 tv;
87 int err;
89 if (get_user(tv.tv_sec, tptr))
90 return -EFAULT;
92 tv.tv_nsec = 0;
94 err = security_settime64(&tv, NULL);
95 if (err)
96 return err;
98 do_settimeofday64(&tv);
99 return 0;
102 #endif /* __ARCH_WANT_SYS_TIME */
104 #ifdef CONFIG_COMPAT
105 #ifdef __ARCH_WANT_COMPAT_SYS_TIME
107 /* old_time32_t is a 32 bit "long" and needs to get converted. */
108 COMPAT_SYSCALL_DEFINE1(time, old_time32_t __user *, tloc)
110 old_time32_t i;
112 i = (old_time32_t)ktime_get_real_seconds();
114 if (tloc) {
115 if (put_user(i,tloc))
116 return -EFAULT;
118 force_successful_syscall_return();
119 return i;
122 COMPAT_SYSCALL_DEFINE1(stime, old_time32_t __user *, tptr)
124 struct timespec64 tv;
125 int err;
127 if (get_user(tv.tv_sec, tptr))
128 return -EFAULT;
130 tv.tv_nsec = 0;
132 err = security_settime64(&tv, NULL);
133 if (err)
134 return err;
136 do_settimeofday64(&tv);
137 return 0;
140 #endif /* __ARCH_WANT_COMPAT_SYS_TIME */
141 #endif
143 SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
144 struct timezone __user *, tz)
146 if (likely(tv != NULL)) {
147 struct timespec64 ts;
149 ktime_get_real_ts64(&ts);
150 if (put_user(ts.tv_sec, &tv->tv_sec) ||
151 put_user(ts.tv_nsec / 1000, &tv->tv_usec))
152 return -EFAULT;
154 if (unlikely(tz != NULL)) {
155 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
156 return -EFAULT;
158 return 0;
162 * In case for some reason the CMOS clock has not already been running
163 * in UTC, but in some local time: The first time we set the timezone,
164 * we will warp the clock so that it is ticking UTC time instead of
165 * local time. Presumably, if someone is setting the timezone then we
166 * are running in an environment where the programs understand about
167 * timezones. This should be done at boot time in the /etc/rc script,
168 * as soon as possible, so that the clock can be set right. Otherwise,
169 * various programs will get confused when the clock gets warped.
172 int do_sys_settimeofday64(const struct timespec64 *tv, const struct timezone *tz)
174 static int firsttime = 1;
175 int error = 0;
177 if (tv && !timespec64_valid(tv))
178 return -EINVAL;
180 error = security_settime64(tv, tz);
181 if (error)
182 return error;
184 if (tz) {
185 /* Verify we're witin the +-15 hrs range */
186 if (tz->tz_minuteswest > 15*60 || tz->tz_minuteswest < -15*60)
187 return -EINVAL;
189 sys_tz = *tz;
190 update_vsyscall_tz();
191 if (firsttime) {
192 firsttime = 0;
193 if (!tv)
194 timekeeping_warp_clock();
197 if (tv)
198 return do_settimeofday64(tv);
199 return 0;
202 SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv,
203 struct timezone __user *, tz)
205 struct timespec64 new_ts;
206 struct timeval user_tv;
207 struct timezone new_tz;
209 if (tv) {
210 if (copy_from_user(&user_tv, tv, sizeof(*tv)))
211 return -EFAULT;
213 if (!timeval_valid(&user_tv))
214 return -EINVAL;
216 new_ts.tv_sec = user_tv.tv_sec;
217 new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
219 if (tz) {
220 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
221 return -EFAULT;
224 return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
227 #ifdef CONFIG_COMPAT
228 COMPAT_SYSCALL_DEFINE2(gettimeofday, struct old_timeval32 __user *, tv,
229 struct timezone __user *, tz)
231 if (tv) {
232 struct timespec64 ts;
234 ktime_get_real_ts64(&ts);
235 if (put_user(ts.tv_sec, &tv->tv_sec) ||
236 put_user(ts.tv_nsec / 1000, &tv->tv_usec))
237 return -EFAULT;
239 if (tz) {
240 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
241 return -EFAULT;
244 return 0;
247 COMPAT_SYSCALL_DEFINE2(settimeofday, struct old_timeval32 __user *, tv,
248 struct timezone __user *, tz)
250 struct timespec64 new_ts;
251 struct timeval user_tv;
252 struct timezone new_tz;
254 if (tv) {
255 if (compat_get_timeval(&user_tv, tv))
256 return -EFAULT;
257 new_ts.tv_sec = user_tv.tv_sec;
258 new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
260 if (tz) {
261 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
262 return -EFAULT;
265 return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
267 #endif
269 SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p)
271 struct timex txc; /* Local copy of parameter */
272 int ret;
274 /* Copy the user data space into the kernel copy
275 * structure. But bear in mind that the structures
276 * may change
278 if (copy_from_user(&txc, txc_p, sizeof(struct timex)))
279 return -EFAULT;
280 ret = do_adjtimex(&txc);
281 return copy_to_user(txc_p, &txc, sizeof(struct timex)) ? -EFAULT : ret;
284 #ifdef CONFIG_COMPAT
286 COMPAT_SYSCALL_DEFINE1(adjtimex, struct compat_timex __user *, utp)
288 struct timex txc;
289 int err, ret;
291 err = compat_get_timex(&txc, utp);
292 if (err)
293 return err;
295 ret = do_adjtimex(&txc);
297 err = compat_put_timex(utp, &txc);
298 if (err)
299 return err;
301 return ret;
303 #endif
306 * Convert jiffies to milliseconds and back.
308 * Avoid unnecessary multiplications/divisions in the
309 * two most common HZ cases:
311 unsigned int jiffies_to_msecs(const unsigned long j)
313 #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
314 return (MSEC_PER_SEC / HZ) * j;
315 #elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
316 return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
317 #else
318 # if BITS_PER_LONG == 32
319 return (HZ_TO_MSEC_MUL32 * j + (1ULL << HZ_TO_MSEC_SHR32) - 1) >>
320 HZ_TO_MSEC_SHR32;
321 # else
322 return DIV_ROUND_UP(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
323 # endif
324 #endif
326 EXPORT_SYMBOL(jiffies_to_msecs);
328 unsigned int jiffies_to_usecs(const unsigned long j)
331 * Hz usually doesn't go much further MSEC_PER_SEC.
332 * jiffies_to_usecs() and usecs_to_jiffies() depend on that.
334 BUILD_BUG_ON(HZ > USEC_PER_SEC);
336 #if !(USEC_PER_SEC % HZ)
337 return (USEC_PER_SEC / HZ) * j;
338 #else
339 # if BITS_PER_LONG == 32
340 return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32;
341 # else
342 return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN;
343 # endif
344 #endif
346 EXPORT_SYMBOL(jiffies_to_usecs);
349 * mktime64 - Converts date to seconds.
350 * Converts Gregorian date to seconds since 1970-01-01 00:00:00.
351 * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
352 * => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
354 * [For the Julian calendar (which was used in Russia before 1917,
355 * Britain & colonies before 1752, anywhere else before 1582,
356 * and is still in use by some communities) leave out the
357 * -year/100+year/400 terms, and add 10.]
359 * This algorithm was first published by Gauss (I think).
361 * A leap second can be indicated by calling this function with sec as
362 * 60 (allowable under ISO 8601). The leap second is treated the same
363 * as the following second since they don't exist in UNIX time.
365 * An encoding of midnight at the end of the day as 24:00:00 - ie. midnight
366 * tomorrow - (allowable under ISO 8601) is supported.
368 time64_t mktime64(const unsigned int year0, const unsigned int mon0,
369 const unsigned int day, const unsigned int hour,
370 const unsigned int min, const unsigned int sec)
372 unsigned int mon = mon0, year = year0;
374 /* 1..12 -> 11,12,1..10 */
375 if (0 >= (int) (mon -= 2)) {
376 mon += 12; /* Puts Feb last since it has leap day */
377 year -= 1;
380 return ((((time64_t)
381 (year/4 - year/100 + year/400 + 367*mon/12 + day) +
382 year*365 - 719499
383 )*24 + hour /* now have hours - midnight tomorrow handled here */
384 )*60 + min /* now have minutes */
385 )*60 + sec; /* finally seconds */
387 EXPORT_SYMBOL(mktime64);
390 * set_normalized_timespec - set timespec sec and nsec parts and normalize
392 * @ts: pointer to timespec variable to be set
393 * @sec: seconds to set
394 * @nsec: nanoseconds to set
396 * Set seconds and nanoseconds field of a timespec variable and
397 * normalize to the timespec storage format
399 * Note: The tv_nsec part is always in the range of
400 * 0 <= tv_nsec < NSEC_PER_SEC
401 * For negative values only the tv_sec field is negative !
403 void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec)
405 while (nsec >= NSEC_PER_SEC) {
407 * The following asm() prevents the compiler from
408 * optimising this loop into a modulo operation. See
409 * also __iter_div_u64_rem() in include/linux/time.h
411 asm("" : "+rm"(nsec));
412 nsec -= NSEC_PER_SEC;
413 ++sec;
415 while (nsec < 0) {
416 asm("" : "+rm"(nsec));
417 nsec += NSEC_PER_SEC;
418 --sec;
420 ts->tv_sec = sec;
421 ts->tv_nsec = nsec;
423 EXPORT_SYMBOL(set_normalized_timespec);
426 * ns_to_timespec - Convert nanoseconds to timespec
427 * @nsec: the nanoseconds value to be converted
429 * Returns the timespec representation of the nsec parameter.
431 struct timespec ns_to_timespec(const s64 nsec)
433 struct timespec ts;
434 s32 rem;
436 if (!nsec)
437 return (struct timespec) {0, 0};
439 ts.tv_sec = div_s64_rem(nsec, NSEC_PER_SEC, &rem);
440 if (unlikely(rem < 0)) {
441 ts.tv_sec--;
442 rem += NSEC_PER_SEC;
444 ts.tv_nsec = rem;
446 return ts;
448 EXPORT_SYMBOL(ns_to_timespec);
451 * ns_to_timeval - Convert nanoseconds to timeval
452 * @nsec: the nanoseconds value to be converted
454 * Returns the timeval representation of the nsec parameter.
456 struct timeval ns_to_timeval(const s64 nsec)
458 struct timespec ts = ns_to_timespec(nsec);
459 struct timeval tv;
461 tv.tv_sec = ts.tv_sec;
462 tv.tv_usec = (suseconds_t) ts.tv_nsec / 1000;
464 return tv;
466 EXPORT_SYMBOL(ns_to_timeval);
468 struct __kernel_old_timeval ns_to_kernel_old_timeval(const s64 nsec)
470 struct timespec64 ts = ns_to_timespec64(nsec);
471 struct __kernel_old_timeval tv;
473 tv.tv_sec = ts.tv_sec;
474 tv.tv_usec = (suseconds_t)ts.tv_nsec / 1000;
476 return tv;
478 EXPORT_SYMBOL(ns_to_kernel_old_timeval);
481 * set_normalized_timespec - set timespec sec and nsec parts and normalize
483 * @ts: pointer to timespec variable to be set
484 * @sec: seconds to set
485 * @nsec: nanoseconds to set
487 * Set seconds and nanoseconds field of a timespec variable and
488 * normalize to the timespec storage format
490 * Note: The tv_nsec part is always in the range of
491 * 0 <= tv_nsec < NSEC_PER_SEC
492 * For negative values only the tv_sec field is negative !
494 void set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 nsec)
496 while (nsec >= NSEC_PER_SEC) {
498 * The following asm() prevents the compiler from
499 * optimising this loop into a modulo operation. See
500 * also __iter_div_u64_rem() in include/linux/time.h
502 asm("" : "+rm"(nsec));
503 nsec -= NSEC_PER_SEC;
504 ++sec;
506 while (nsec < 0) {
507 asm("" : "+rm"(nsec));
508 nsec += NSEC_PER_SEC;
509 --sec;
511 ts->tv_sec = sec;
512 ts->tv_nsec = nsec;
514 EXPORT_SYMBOL(set_normalized_timespec64);
517 * ns_to_timespec64 - Convert nanoseconds to timespec64
518 * @nsec: the nanoseconds value to be converted
520 * Returns the timespec64 representation of the nsec parameter.
522 struct timespec64 ns_to_timespec64(const s64 nsec)
524 struct timespec64 ts;
525 s32 rem;
527 if (!nsec)
528 return (struct timespec64) {0, 0};
530 ts.tv_sec = div_s64_rem(nsec, NSEC_PER_SEC, &rem);
531 if (unlikely(rem < 0)) {
532 ts.tv_sec--;
533 rem += NSEC_PER_SEC;
535 ts.tv_nsec = rem;
537 return ts;
539 EXPORT_SYMBOL(ns_to_timespec64);
542 * msecs_to_jiffies: - convert milliseconds to jiffies
543 * @m: time in milliseconds
545 * conversion is done as follows:
547 * - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
549 * - 'too large' values [that would result in larger than
550 * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
552 * - all other values are converted to jiffies by either multiplying
553 * the input value by a factor or dividing it with a factor and
554 * handling any 32-bit overflows.
555 * for the details see __msecs_to_jiffies()
557 * msecs_to_jiffies() checks for the passed in value being a constant
558 * via __builtin_constant_p() allowing gcc to eliminate most of the
559 * code, __msecs_to_jiffies() is called if the value passed does not
560 * allow constant folding and the actual conversion must be done at
561 * runtime.
562 * the _msecs_to_jiffies helpers are the HZ dependent conversion
563 * routines found in include/linux/jiffies.h
565 unsigned long __msecs_to_jiffies(const unsigned int m)
568 * Negative value, means infinite timeout:
570 if ((int)m < 0)
571 return MAX_JIFFY_OFFSET;
572 return _msecs_to_jiffies(m);
574 EXPORT_SYMBOL(__msecs_to_jiffies);
576 unsigned long __usecs_to_jiffies(const unsigned int u)
578 if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
579 return MAX_JIFFY_OFFSET;
580 return _usecs_to_jiffies(u);
582 EXPORT_SYMBOL(__usecs_to_jiffies);
585 * The TICK_NSEC - 1 rounds up the value to the next resolution. Note
586 * that a remainder subtract here would not do the right thing as the
587 * resolution values don't fall on second boundries. I.e. the line:
588 * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding.
589 * Note that due to the small error in the multiplier here, this
590 * rounding is incorrect for sufficiently large values of tv_nsec, but
591 * well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're
592 * OK.
594 * Rather, we just shift the bits off the right.
596 * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec
597 * value to a scaled second value.
599 static unsigned long
600 __timespec64_to_jiffies(u64 sec, long nsec)
602 nsec = nsec + TICK_NSEC - 1;
604 if (sec >= MAX_SEC_IN_JIFFIES){
605 sec = MAX_SEC_IN_JIFFIES;
606 nsec = 0;
608 return ((sec * SEC_CONVERSION) +
609 (((u64)nsec * NSEC_CONVERSION) >>
610 (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC;
614 static unsigned long
615 __timespec_to_jiffies(unsigned long sec, long nsec)
617 return __timespec64_to_jiffies((u64)sec, nsec);
620 unsigned long
621 timespec64_to_jiffies(const struct timespec64 *value)
623 return __timespec64_to_jiffies(value->tv_sec, value->tv_nsec);
625 EXPORT_SYMBOL(timespec64_to_jiffies);
627 void
628 jiffies_to_timespec64(const unsigned long jiffies, struct timespec64 *value)
631 * Convert jiffies to nanoseconds and separate with
632 * one divide.
634 u32 rem;
635 value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
636 NSEC_PER_SEC, &rem);
637 value->tv_nsec = rem;
639 EXPORT_SYMBOL(jiffies_to_timespec64);
642 * We could use a similar algorithm to timespec_to_jiffies (with a
643 * different multiplier for usec instead of nsec). But this has a
644 * problem with rounding: we can't exactly add TICK_NSEC - 1 to the
645 * usec value, since it's not necessarily integral.
647 * We could instead round in the intermediate scaled representation
648 * (i.e. in units of 1/2^(large scale) jiffies) but that's also
649 * perilous: the scaling introduces a small positive error, which
650 * combined with a division-rounding-upward (i.e. adding 2^(scale) - 1
651 * units to the intermediate before shifting) leads to accidental
652 * overflow and overestimates.
654 * At the cost of one additional multiplication by a constant, just
655 * use the timespec implementation.
657 unsigned long
658 timeval_to_jiffies(const struct timeval *value)
660 return __timespec_to_jiffies(value->tv_sec,
661 value->tv_usec * NSEC_PER_USEC);
663 EXPORT_SYMBOL(timeval_to_jiffies);
665 void jiffies_to_timeval(const unsigned long jiffies, struct timeval *value)
668 * Convert jiffies to nanoseconds and separate with
669 * one divide.
671 u32 rem;
673 value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
674 NSEC_PER_SEC, &rem);
675 value->tv_usec = rem / NSEC_PER_USEC;
677 EXPORT_SYMBOL(jiffies_to_timeval);
680 * Convert jiffies/jiffies_64 to clock_t and back.
682 clock_t jiffies_to_clock_t(unsigned long x)
684 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
685 # if HZ < USER_HZ
686 return x * (USER_HZ / HZ);
687 # else
688 return x / (HZ / USER_HZ);
689 # endif
690 #else
691 return div_u64((u64)x * TICK_NSEC, NSEC_PER_SEC / USER_HZ);
692 #endif
694 EXPORT_SYMBOL(jiffies_to_clock_t);
696 unsigned long clock_t_to_jiffies(unsigned long x)
698 #if (HZ % USER_HZ)==0
699 if (x >= ~0UL / (HZ / USER_HZ))
700 return ~0UL;
701 return x * (HZ / USER_HZ);
702 #else
703 /* Don't worry about loss of precision here .. */
704 if (x >= ~0UL / HZ * USER_HZ)
705 return ~0UL;
707 /* .. but do try to contain it here */
708 return div_u64((u64)x * HZ, USER_HZ);
709 #endif
711 EXPORT_SYMBOL(clock_t_to_jiffies);
713 u64 jiffies_64_to_clock_t(u64 x)
715 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
716 # if HZ < USER_HZ
717 x = div_u64(x * USER_HZ, HZ);
718 # elif HZ > USER_HZ
719 x = div_u64(x, HZ / USER_HZ);
720 # else
721 /* Nothing to do */
722 # endif
723 #else
725 * There are better ways that don't overflow early,
726 * but even this doesn't overflow in hundreds of years
727 * in 64 bits, so..
729 x = div_u64(x * TICK_NSEC, (NSEC_PER_SEC / USER_HZ));
730 #endif
731 return x;
733 EXPORT_SYMBOL(jiffies_64_to_clock_t);
735 u64 nsec_to_clock_t(u64 x)
737 #if (NSEC_PER_SEC % USER_HZ) == 0
738 return div_u64(x, NSEC_PER_SEC / USER_HZ);
739 #elif (USER_HZ % 512) == 0
740 return div_u64(x * USER_HZ / 512, NSEC_PER_SEC / 512);
741 #else
743 * max relative error 5.7e-8 (1.8s per year) for USER_HZ <= 1024,
744 * overflow after 64.99 years.
745 * exact for HZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
747 return div_u64(x * 9, (9ull * NSEC_PER_SEC + (USER_HZ / 2)) / USER_HZ);
748 #endif
751 u64 jiffies64_to_nsecs(u64 j)
753 #if !(NSEC_PER_SEC % HZ)
754 return (NSEC_PER_SEC / HZ) * j;
755 # else
756 return div_u64(j * HZ_TO_NSEC_NUM, HZ_TO_NSEC_DEN);
757 #endif
759 EXPORT_SYMBOL(jiffies64_to_nsecs);
762 * nsecs_to_jiffies64 - Convert nsecs in u64 to jiffies64
764 * @n: nsecs in u64
766 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
767 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
768 * for scheduler, not for use in device drivers to calculate timeout value.
770 * note:
771 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
772 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
774 u64 nsecs_to_jiffies64(u64 n)
776 #if (NSEC_PER_SEC % HZ) == 0
777 /* Common case, HZ = 100, 128, 200, 250, 256, 500, 512, 1000 etc. */
778 return div_u64(n, NSEC_PER_SEC / HZ);
779 #elif (HZ % 512) == 0
780 /* overflow after 292 years if HZ = 1024 */
781 return div_u64(n * HZ / 512, NSEC_PER_SEC / 512);
782 #else
784 * Generic case - optimized for cases where HZ is a multiple of 3.
785 * overflow after 64.99 years, exact for HZ = 60, 72, 90, 120 etc.
787 return div_u64(n * 9, (9ull * NSEC_PER_SEC + HZ / 2) / HZ);
788 #endif
790 EXPORT_SYMBOL(nsecs_to_jiffies64);
793 * nsecs_to_jiffies - Convert nsecs in u64 to jiffies
795 * @n: nsecs in u64
797 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
798 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
799 * for scheduler, not for use in device drivers to calculate timeout value.
801 * note:
802 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
803 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
805 unsigned long nsecs_to_jiffies(u64 n)
807 return (unsigned long)nsecs_to_jiffies64(n);
809 EXPORT_SYMBOL_GPL(nsecs_to_jiffies);
812 * Add two timespec64 values and do a safety check for overflow.
813 * It's assumed that both values are valid (>= 0).
814 * And, each timespec64 is in normalized form.
816 struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
817 const struct timespec64 rhs)
819 struct timespec64 res;
821 set_normalized_timespec64(&res, (timeu64_t) lhs.tv_sec + rhs.tv_sec,
822 lhs.tv_nsec + rhs.tv_nsec);
824 if (unlikely(res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)) {
825 res.tv_sec = TIME64_MAX;
826 res.tv_nsec = 0;
829 return res;
832 int get_timespec64(struct timespec64 *ts,
833 const struct __kernel_timespec __user *uts)
835 struct __kernel_timespec kts;
836 int ret;
838 ret = copy_from_user(&kts, uts, sizeof(kts));
839 if (ret)
840 return -EFAULT;
842 ts->tv_sec = kts.tv_sec;
844 /* Zero out the padding for 32 bit systems or in compat mode */
845 if (IS_ENABLED(CONFIG_64BIT_TIME) && (!IS_ENABLED(CONFIG_64BIT) || in_compat_syscall()))
846 kts.tv_nsec &= 0xFFFFFFFFUL;
848 ts->tv_nsec = kts.tv_nsec;
850 return 0;
852 EXPORT_SYMBOL_GPL(get_timespec64);
854 int put_timespec64(const struct timespec64 *ts,
855 struct __kernel_timespec __user *uts)
857 struct __kernel_timespec kts = {
858 .tv_sec = ts->tv_sec,
859 .tv_nsec = ts->tv_nsec
862 return copy_to_user(uts, &kts, sizeof(kts)) ? -EFAULT : 0;
864 EXPORT_SYMBOL_GPL(put_timespec64);
866 static int __get_old_timespec32(struct timespec64 *ts64,
867 const struct old_timespec32 __user *cts)
869 struct old_timespec32 ts;
870 int ret;
872 ret = copy_from_user(&ts, cts, sizeof(ts));
873 if (ret)
874 return -EFAULT;
876 ts64->tv_sec = ts.tv_sec;
877 ts64->tv_nsec = ts.tv_nsec;
879 return 0;
882 static int __put_old_timespec32(const struct timespec64 *ts64,
883 struct old_timespec32 __user *cts)
885 struct old_timespec32 ts = {
886 .tv_sec = ts64->tv_sec,
887 .tv_nsec = ts64->tv_nsec
889 return copy_to_user(cts, &ts, sizeof(ts)) ? -EFAULT : 0;
892 int get_old_timespec32(struct timespec64 *ts, const void __user *uts)
894 if (COMPAT_USE_64BIT_TIME)
895 return copy_from_user(ts, uts, sizeof(*ts)) ? -EFAULT : 0;
896 else
897 return __get_old_timespec32(ts, uts);
899 EXPORT_SYMBOL_GPL(get_old_timespec32);
901 int put_old_timespec32(const struct timespec64 *ts, void __user *uts)
903 if (COMPAT_USE_64BIT_TIME)
904 return copy_to_user(uts, ts, sizeof(*ts)) ? -EFAULT : 0;
905 else
906 return __put_old_timespec32(ts, uts);
908 EXPORT_SYMBOL_GPL(put_old_timespec32);
910 int get_itimerspec64(struct itimerspec64 *it,
911 const struct __kernel_itimerspec __user *uit)
913 int ret;
915 ret = get_timespec64(&it->it_interval, &uit->it_interval);
916 if (ret)
917 return ret;
919 ret = get_timespec64(&it->it_value, &uit->it_value);
921 return ret;
923 EXPORT_SYMBOL_GPL(get_itimerspec64);
925 int put_itimerspec64(const struct itimerspec64 *it,
926 struct __kernel_itimerspec __user *uit)
928 int ret;
930 ret = put_timespec64(&it->it_interval, &uit->it_interval);
931 if (ret)
932 return ret;
934 ret = put_timespec64(&it->it_value, &uit->it_value);
936 return ret;
938 EXPORT_SYMBOL_GPL(put_itimerspec64);
940 int get_old_itimerspec32(struct itimerspec64 *its,
941 const struct old_itimerspec32 __user *uits)
944 if (__get_old_timespec32(&its->it_interval, &uits->it_interval) ||
945 __get_old_timespec32(&its->it_value, &uits->it_value))
946 return -EFAULT;
947 return 0;
949 EXPORT_SYMBOL_GPL(get_old_itimerspec32);
951 int put_old_itimerspec32(const struct itimerspec64 *its,
952 struct old_itimerspec32 __user *uits)
954 if (__put_old_timespec32(&its->it_interval, &uits->it_interval) ||
955 __put_old_timespec32(&its->it_value, &uits->it_value))
956 return -EFAULT;
957 return 0;
959 EXPORT_SYMBOL_GPL(put_old_itimerspec32);