mtd: rawnand: sunxi: Add A23/A33 DMA support
[linux/fpc-iii.git] / kernel / time / time.c
blobc3f756f8534bba606b1fcee479bfcb0e05829502
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (C) 1991, 1992 Linus Torvalds
5 * This file contains the interface functions for the various time related
6 * system calls: time, stime, gettimeofday, settimeofday, adjtime
8 * Modification history:
10 * 1993-09-02 Philip Gladstone
11 * Created file with time related functions from sched/core.c and adjtimex()
12 * 1993-10-08 Torsten Duwe
13 * adjtime interface update and CMOS clock write code
14 * 1995-08-13 Torsten Duwe
15 * kernel PLL updated to 1994-12-13 specs (rfc-1589)
16 * 1999-01-16 Ulrich Windl
17 * Introduced error checking for many cases in adjtimex().
18 * Updated NTP code according to technical memorandum Jan '96
19 * "A Kernel Model for Precision Timekeeping" by Dave Mills
20 * Allow time_constant larger than MAXTC(6) for NTP v4 (MAXTC == 10)
21 * (Even though the technical memorandum forbids it)
22 * 2004-07-14 Christoph Lameter
23 * Added getnstimeofday to allow the posix timer functions to return
24 * with nanosecond accuracy
27 #include <linux/export.h>
28 #include <linux/kernel.h>
29 #include <linux/timex.h>
30 #include <linux/capability.h>
31 #include <linux/timekeeper_internal.h>
32 #include <linux/errno.h>
33 #include <linux/syscalls.h>
34 #include <linux/security.h>
35 #include <linux/fs.h>
36 #include <linux/math64.h>
37 #include <linux/ptrace.h>
39 #include <linux/uaccess.h>
40 #include <linux/compat.h>
41 #include <asm/unistd.h>
43 #include <generated/timeconst.h>
44 #include "timekeeping.h"
47 * The timezone where the local system is located. Used as a default by some
48 * programs who obtain this value by using gettimeofday.
50 struct timezone sys_tz;
52 EXPORT_SYMBOL(sys_tz);
54 #ifdef __ARCH_WANT_SYS_TIME
57 * sys_time() can be implemented in user-level using
58 * sys_gettimeofday(). Is this for backwards compatibility? If so,
59 * why not move it into the appropriate arch directory (for those
60 * architectures that need it).
62 SYSCALL_DEFINE1(time, time_t __user *, tloc)
64 time_t i = (time_t)ktime_get_real_seconds();
66 if (tloc) {
67 if (put_user(i,tloc))
68 return -EFAULT;
70 force_successful_syscall_return();
71 return i;
75 * sys_stime() can be implemented in user-level using
76 * sys_settimeofday(). Is this for backwards compatibility? If so,
77 * why not move it into the appropriate arch directory (for those
78 * architectures that need it).
81 SYSCALL_DEFINE1(stime, time_t __user *, tptr)
83 struct timespec64 tv;
84 int err;
86 if (get_user(tv.tv_sec, tptr))
87 return -EFAULT;
89 tv.tv_nsec = 0;
91 err = security_settime64(&tv, NULL);
92 if (err)
93 return err;
95 do_settimeofday64(&tv);
96 return 0;
99 #endif /* __ARCH_WANT_SYS_TIME */
101 #ifdef CONFIG_COMPAT_32BIT_TIME
102 #ifdef __ARCH_WANT_SYS_TIME32
104 /* old_time32_t is a 32 bit "long" and needs to get converted. */
105 SYSCALL_DEFINE1(time32, old_time32_t __user *, tloc)
107 old_time32_t i;
109 i = (old_time32_t)ktime_get_real_seconds();
111 if (tloc) {
112 if (put_user(i,tloc))
113 return -EFAULT;
115 force_successful_syscall_return();
116 return i;
119 SYSCALL_DEFINE1(stime32, old_time32_t __user *, tptr)
121 struct timespec64 tv;
122 int err;
124 if (get_user(tv.tv_sec, tptr))
125 return -EFAULT;
127 tv.tv_nsec = 0;
129 err = security_settime64(&tv, NULL);
130 if (err)
131 return err;
133 do_settimeofday64(&tv);
134 return 0;
137 #endif /* __ARCH_WANT_SYS_TIME32 */
138 #endif
140 SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
141 struct timezone __user *, tz)
143 if (likely(tv != NULL)) {
144 struct timespec64 ts;
146 ktime_get_real_ts64(&ts);
147 if (put_user(ts.tv_sec, &tv->tv_sec) ||
148 put_user(ts.tv_nsec / 1000, &tv->tv_usec))
149 return -EFAULT;
151 if (unlikely(tz != NULL)) {
152 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
153 return -EFAULT;
155 return 0;
159 * In case for some reason the CMOS clock has not already been running
160 * in UTC, but in some local time: The first time we set the timezone,
161 * we will warp the clock so that it is ticking UTC time instead of
162 * local time. Presumably, if someone is setting the timezone then we
163 * are running in an environment where the programs understand about
164 * timezones. This should be done at boot time in the /etc/rc script,
165 * as soon as possible, so that the clock can be set right. Otherwise,
166 * various programs will get confused when the clock gets warped.
169 int do_sys_settimeofday64(const struct timespec64 *tv, const struct timezone *tz)
171 static int firsttime = 1;
172 int error = 0;
174 if (tv && !timespec64_valid(tv))
175 return -EINVAL;
177 error = security_settime64(tv, tz);
178 if (error)
179 return error;
181 if (tz) {
182 /* Verify we're witin the +-15 hrs range */
183 if (tz->tz_minuteswest > 15*60 || tz->tz_minuteswest < -15*60)
184 return -EINVAL;
186 sys_tz = *tz;
187 update_vsyscall_tz();
188 if (firsttime) {
189 firsttime = 0;
190 if (!tv)
191 timekeeping_warp_clock();
194 if (tv)
195 return do_settimeofday64(tv);
196 return 0;
199 SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv,
200 struct timezone __user *, tz)
202 struct timespec64 new_ts;
203 struct timeval user_tv;
204 struct timezone new_tz;
206 if (tv) {
207 if (copy_from_user(&user_tv, tv, sizeof(*tv)))
208 return -EFAULT;
210 if (!timeval_valid(&user_tv))
211 return -EINVAL;
213 new_ts.tv_sec = user_tv.tv_sec;
214 new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
216 if (tz) {
217 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
218 return -EFAULT;
221 return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
224 #ifdef CONFIG_COMPAT
225 COMPAT_SYSCALL_DEFINE2(gettimeofday, struct old_timeval32 __user *, tv,
226 struct timezone __user *, tz)
228 if (tv) {
229 struct timespec64 ts;
231 ktime_get_real_ts64(&ts);
232 if (put_user(ts.tv_sec, &tv->tv_sec) ||
233 put_user(ts.tv_nsec / 1000, &tv->tv_usec))
234 return -EFAULT;
236 if (tz) {
237 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
238 return -EFAULT;
241 return 0;
244 COMPAT_SYSCALL_DEFINE2(settimeofday, struct old_timeval32 __user *, tv,
245 struct timezone __user *, tz)
247 struct timespec64 new_ts;
248 struct timeval user_tv;
249 struct timezone new_tz;
251 if (tv) {
252 if (compat_get_timeval(&user_tv, tv))
253 return -EFAULT;
254 new_ts.tv_sec = user_tv.tv_sec;
255 new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
257 if (tz) {
258 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
259 return -EFAULT;
262 return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
264 #endif
266 #if !defined(CONFIG_64BIT_TIME) || defined(CONFIG_64BIT)
267 SYSCALL_DEFINE1(adjtimex, struct __kernel_timex __user *, txc_p)
269 struct __kernel_timex txc; /* Local copy of parameter */
270 int ret;
272 /* Copy the user data space into the kernel copy
273 * structure. But bear in mind that the structures
274 * may change
276 if (copy_from_user(&txc, txc_p, sizeof(struct __kernel_timex)))
277 return -EFAULT;
278 ret = do_adjtimex(&txc);
279 return copy_to_user(txc_p, &txc, sizeof(struct __kernel_timex)) ? -EFAULT : ret;
281 #endif
283 #ifdef CONFIG_COMPAT_32BIT_TIME
284 int get_old_timex32(struct __kernel_timex *txc, const struct old_timex32 __user *utp)
286 struct old_timex32 tx32;
288 memset(txc, 0, sizeof(struct __kernel_timex));
289 if (copy_from_user(&tx32, utp, sizeof(struct old_timex32)))
290 return -EFAULT;
292 txc->modes = tx32.modes;
293 txc->offset = tx32.offset;
294 txc->freq = tx32.freq;
295 txc->maxerror = tx32.maxerror;
296 txc->esterror = tx32.esterror;
297 txc->status = tx32.status;
298 txc->constant = tx32.constant;
299 txc->precision = tx32.precision;
300 txc->tolerance = tx32.tolerance;
301 txc->time.tv_sec = tx32.time.tv_sec;
302 txc->time.tv_usec = tx32.time.tv_usec;
303 txc->tick = tx32.tick;
304 txc->ppsfreq = tx32.ppsfreq;
305 txc->jitter = tx32.jitter;
306 txc->shift = tx32.shift;
307 txc->stabil = tx32.stabil;
308 txc->jitcnt = tx32.jitcnt;
309 txc->calcnt = tx32.calcnt;
310 txc->errcnt = tx32.errcnt;
311 txc->stbcnt = tx32.stbcnt;
313 return 0;
316 int put_old_timex32(struct old_timex32 __user *utp, const struct __kernel_timex *txc)
318 struct old_timex32 tx32;
320 memset(&tx32, 0, sizeof(struct old_timex32));
321 tx32.modes = txc->modes;
322 tx32.offset = txc->offset;
323 tx32.freq = txc->freq;
324 tx32.maxerror = txc->maxerror;
325 tx32.esterror = txc->esterror;
326 tx32.status = txc->status;
327 tx32.constant = txc->constant;
328 tx32.precision = txc->precision;
329 tx32.tolerance = txc->tolerance;
330 tx32.time.tv_sec = txc->time.tv_sec;
331 tx32.time.tv_usec = txc->time.tv_usec;
332 tx32.tick = txc->tick;
333 tx32.ppsfreq = txc->ppsfreq;
334 tx32.jitter = txc->jitter;
335 tx32.shift = txc->shift;
336 tx32.stabil = txc->stabil;
337 tx32.jitcnt = txc->jitcnt;
338 tx32.calcnt = txc->calcnt;
339 tx32.errcnt = txc->errcnt;
340 tx32.stbcnt = txc->stbcnt;
341 tx32.tai = txc->tai;
342 if (copy_to_user(utp, &tx32, sizeof(struct old_timex32)))
343 return -EFAULT;
344 return 0;
347 SYSCALL_DEFINE1(adjtimex_time32, struct old_timex32 __user *, utp)
349 struct __kernel_timex txc;
350 int err, ret;
352 err = get_old_timex32(&txc, utp);
353 if (err)
354 return err;
356 ret = do_adjtimex(&txc);
358 err = put_old_timex32(utp, &txc);
359 if (err)
360 return err;
362 return ret;
364 #endif
367 * Convert jiffies to milliseconds and back.
369 * Avoid unnecessary multiplications/divisions in the
370 * two most common HZ cases:
372 unsigned int jiffies_to_msecs(const unsigned long j)
374 #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
375 return (MSEC_PER_SEC / HZ) * j;
376 #elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
377 return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
378 #else
379 # if BITS_PER_LONG == 32
380 return (HZ_TO_MSEC_MUL32 * j + (1ULL << HZ_TO_MSEC_SHR32) - 1) >>
381 HZ_TO_MSEC_SHR32;
382 # else
383 return DIV_ROUND_UP(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
384 # endif
385 #endif
387 EXPORT_SYMBOL(jiffies_to_msecs);
389 unsigned int jiffies_to_usecs(const unsigned long j)
392 * Hz usually doesn't go much further MSEC_PER_SEC.
393 * jiffies_to_usecs() and usecs_to_jiffies() depend on that.
395 BUILD_BUG_ON(HZ > USEC_PER_SEC);
397 #if !(USEC_PER_SEC % HZ)
398 return (USEC_PER_SEC / HZ) * j;
399 #else
400 # if BITS_PER_LONG == 32
401 return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32;
402 # else
403 return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN;
404 # endif
405 #endif
407 EXPORT_SYMBOL(jiffies_to_usecs);
410 * mktime64 - Converts date to seconds.
411 * Converts Gregorian date to seconds since 1970-01-01 00:00:00.
412 * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
413 * => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
415 * [For the Julian calendar (which was used in Russia before 1917,
416 * Britain & colonies before 1752, anywhere else before 1582,
417 * and is still in use by some communities) leave out the
418 * -year/100+year/400 terms, and add 10.]
420 * This algorithm was first published by Gauss (I think).
422 * A leap second can be indicated by calling this function with sec as
423 * 60 (allowable under ISO 8601). The leap second is treated the same
424 * as the following second since they don't exist in UNIX time.
426 * An encoding of midnight at the end of the day as 24:00:00 - ie. midnight
427 * tomorrow - (allowable under ISO 8601) is supported.
429 time64_t mktime64(const unsigned int year0, const unsigned int mon0,
430 const unsigned int day, const unsigned int hour,
431 const unsigned int min, const unsigned int sec)
433 unsigned int mon = mon0, year = year0;
435 /* 1..12 -> 11,12,1..10 */
436 if (0 >= (int) (mon -= 2)) {
437 mon += 12; /* Puts Feb last since it has leap day */
438 year -= 1;
441 return ((((time64_t)
442 (year/4 - year/100 + year/400 + 367*mon/12 + day) +
443 year*365 - 719499
444 )*24 + hour /* now have hours - midnight tomorrow handled here */
445 )*60 + min /* now have minutes */
446 )*60 + sec; /* finally seconds */
448 EXPORT_SYMBOL(mktime64);
451 * ns_to_timespec - Convert nanoseconds to timespec
452 * @nsec: the nanoseconds value to be converted
454 * Returns the timespec representation of the nsec parameter.
456 struct timespec ns_to_timespec(const s64 nsec)
458 struct timespec ts;
459 s32 rem;
461 if (!nsec)
462 return (struct timespec) {0, 0};
464 ts.tv_sec = div_s64_rem(nsec, NSEC_PER_SEC, &rem);
465 if (unlikely(rem < 0)) {
466 ts.tv_sec--;
467 rem += NSEC_PER_SEC;
469 ts.tv_nsec = rem;
471 return ts;
473 EXPORT_SYMBOL(ns_to_timespec);
476 * ns_to_timeval - Convert nanoseconds to timeval
477 * @nsec: the nanoseconds value to be converted
479 * Returns the timeval representation of the nsec parameter.
481 struct timeval ns_to_timeval(const s64 nsec)
483 struct timespec ts = ns_to_timespec(nsec);
484 struct timeval tv;
486 tv.tv_sec = ts.tv_sec;
487 tv.tv_usec = (suseconds_t) ts.tv_nsec / 1000;
489 return tv;
491 EXPORT_SYMBOL(ns_to_timeval);
493 struct __kernel_old_timeval ns_to_kernel_old_timeval(const s64 nsec)
495 struct timespec64 ts = ns_to_timespec64(nsec);
496 struct __kernel_old_timeval tv;
498 tv.tv_sec = ts.tv_sec;
499 tv.tv_usec = (suseconds_t)ts.tv_nsec / 1000;
501 return tv;
503 EXPORT_SYMBOL(ns_to_kernel_old_timeval);
506 * set_normalized_timespec - set timespec sec and nsec parts and normalize
508 * @ts: pointer to timespec variable to be set
509 * @sec: seconds to set
510 * @nsec: nanoseconds to set
512 * Set seconds and nanoseconds field of a timespec variable and
513 * normalize to the timespec storage format
515 * Note: The tv_nsec part is always in the range of
516 * 0 <= tv_nsec < NSEC_PER_SEC
517 * For negative values only the tv_sec field is negative !
519 void set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 nsec)
521 while (nsec >= NSEC_PER_SEC) {
523 * The following asm() prevents the compiler from
524 * optimising this loop into a modulo operation. See
525 * also __iter_div_u64_rem() in include/linux/time.h
527 asm("" : "+rm"(nsec));
528 nsec -= NSEC_PER_SEC;
529 ++sec;
531 while (nsec < 0) {
532 asm("" : "+rm"(nsec));
533 nsec += NSEC_PER_SEC;
534 --sec;
536 ts->tv_sec = sec;
537 ts->tv_nsec = nsec;
539 EXPORT_SYMBOL(set_normalized_timespec64);
542 * ns_to_timespec64 - Convert nanoseconds to timespec64
543 * @nsec: the nanoseconds value to be converted
545 * Returns the timespec64 representation of the nsec parameter.
547 struct timespec64 ns_to_timespec64(const s64 nsec)
549 struct timespec64 ts;
550 s32 rem;
552 if (!nsec)
553 return (struct timespec64) {0, 0};
555 ts.tv_sec = div_s64_rem(nsec, NSEC_PER_SEC, &rem);
556 if (unlikely(rem < 0)) {
557 ts.tv_sec--;
558 rem += NSEC_PER_SEC;
560 ts.tv_nsec = rem;
562 return ts;
564 EXPORT_SYMBOL(ns_to_timespec64);
567 * msecs_to_jiffies: - convert milliseconds to jiffies
568 * @m: time in milliseconds
570 * conversion is done as follows:
572 * - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
574 * - 'too large' values [that would result in larger than
575 * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
577 * - all other values are converted to jiffies by either multiplying
578 * the input value by a factor or dividing it with a factor and
579 * handling any 32-bit overflows.
580 * for the details see __msecs_to_jiffies()
582 * msecs_to_jiffies() checks for the passed in value being a constant
583 * via __builtin_constant_p() allowing gcc to eliminate most of the
584 * code, __msecs_to_jiffies() is called if the value passed does not
585 * allow constant folding and the actual conversion must be done at
586 * runtime.
587 * the _msecs_to_jiffies helpers are the HZ dependent conversion
588 * routines found in include/linux/jiffies.h
590 unsigned long __msecs_to_jiffies(const unsigned int m)
593 * Negative value, means infinite timeout:
595 if ((int)m < 0)
596 return MAX_JIFFY_OFFSET;
597 return _msecs_to_jiffies(m);
599 EXPORT_SYMBOL(__msecs_to_jiffies);
601 unsigned long __usecs_to_jiffies(const unsigned int u)
603 if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
604 return MAX_JIFFY_OFFSET;
605 return _usecs_to_jiffies(u);
607 EXPORT_SYMBOL(__usecs_to_jiffies);
610 * The TICK_NSEC - 1 rounds up the value to the next resolution. Note
611 * that a remainder subtract here would not do the right thing as the
612 * resolution values don't fall on second boundries. I.e. the line:
613 * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding.
614 * Note that due to the small error in the multiplier here, this
615 * rounding is incorrect for sufficiently large values of tv_nsec, but
616 * well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're
617 * OK.
619 * Rather, we just shift the bits off the right.
621 * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec
622 * value to a scaled second value.
624 static unsigned long
625 __timespec64_to_jiffies(u64 sec, long nsec)
627 nsec = nsec + TICK_NSEC - 1;
629 if (sec >= MAX_SEC_IN_JIFFIES){
630 sec = MAX_SEC_IN_JIFFIES;
631 nsec = 0;
633 return ((sec * SEC_CONVERSION) +
634 (((u64)nsec * NSEC_CONVERSION) >>
635 (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC;
639 static unsigned long
640 __timespec_to_jiffies(unsigned long sec, long nsec)
642 return __timespec64_to_jiffies((u64)sec, nsec);
645 unsigned long
646 timespec64_to_jiffies(const struct timespec64 *value)
648 return __timespec64_to_jiffies(value->tv_sec, value->tv_nsec);
650 EXPORT_SYMBOL(timespec64_to_jiffies);
652 void
653 jiffies_to_timespec64(const unsigned long jiffies, struct timespec64 *value)
656 * Convert jiffies to nanoseconds and separate with
657 * one divide.
659 u32 rem;
660 value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
661 NSEC_PER_SEC, &rem);
662 value->tv_nsec = rem;
664 EXPORT_SYMBOL(jiffies_to_timespec64);
667 * We could use a similar algorithm to timespec_to_jiffies (with a
668 * different multiplier for usec instead of nsec). But this has a
669 * problem with rounding: we can't exactly add TICK_NSEC - 1 to the
670 * usec value, since it's not necessarily integral.
672 * We could instead round in the intermediate scaled representation
673 * (i.e. in units of 1/2^(large scale) jiffies) but that's also
674 * perilous: the scaling introduces a small positive error, which
675 * combined with a division-rounding-upward (i.e. adding 2^(scale) - 1
676 * units to the intermediate before shifting) leads to accidental
677 * overflow and overestimates.
679 * At the cost of one additional multiplication by a constant, just
680 * use the timespec implementation.
682 unsigned long
683 timeval_to_jiffies(const struct timeval *value)
685 return __timespec_to_jiffies(value->tv_sec,
686 value->tv_usec * NSEC_PER_USEC);
688 EXPORT_SYMBOL(timeval_to_jiffies);
690 void jiffies_to_timeval(const unsigned long jiffies, struct timeval *value)
693 * Convert jiffies to nanoseconds and separate with
694 * one divide.
696 u32 rem;
698 value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
699 NSEC_PER_SEC, &rem);
700 value->tv_usec = rem / NSEC_PER_USEC;
702 EXPORT_SYMBOL(jiffies_to_timeval);
705 * Convert jiffies/jiffies_64 to clock_t and back.
707 clock_t jiffies_to_clock_t(unsigned long x)
709 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
710 # if HZ < USER_HZ
711 return x * (USER_HZ / HZ);
712 # else
713 return x / (HZ / USER_HZ);
714 # endif
715 #else
716 return div_u64((u64)x * TICK_NSEC, NSEC_PER_SEC / USER_HZ);
717 #endif
719 EXPORT_SYMBOL(jiffies_to_clock_t);
721 unsigned long clock_t_to_jiffies(unsigned long x)
723 #if (HZ % USER_HZ)==0
724 if (x >= ~0UL / (HZ / USER_HZ))
725 return ~0UL;
726 return x * (HZ / USER_HZ);
727 #else
728 /* Don't worry about loss of precision here .. */
729 if (x >= ~0UL / HZ * USER_HZ)
730 return ~0UL;
732 /* .. but do try to contain it here */
733 return div_u64((u64)x * HZ, USER_HZ);
734 #endif
736 EXPORT_SYMBOL(clock_t_to_jiffies);
738 u64 jiffies_64_to_clock_t(u64 x)
740 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
741 # if HZ < USER_HZ
742 x = div_u64(x * USER_HZ, HZ);
743 # elif HZ > USER_HZ
744 x = div_u64(x, HZ / USER_HZ);
745 # else
746 /* Nothing to do */
747 # endif
748 #else
750 * There are better ways that don't overflow early,
751 * but even this doesn't overflow in hundreds of years
752 * in 64 bits, so..
754 x = div_u64(x * TICK_NSEC, (NSEC_PER_SEC / USER_HZ));
755 #endif
756 return x;
758 EXPORT_SYMBOL(jiffies_64_to_clock_t);
760 u64 nsec_to_clock_t(u64 x)
762 #if (NSEC_PER_SEC % USER_HZ) == 0
763 return div_u64(x, NSEC_PER_SEC / USER_HZ);
764 #elif (USER_HZ % 512) == 0
765 return div_u64(x * USER_HZ / 512, NSEC_PER_SEC / 512);
766 #else
768 * max relative error 5.7e-8 (1.8s per year) for USER_HZ <= 1024,
769 * overflow after 64.99 years.
770 * exact for HZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
772 return div_u64(x * 9, (9ull * NSEC_PER_SEC + (USER_HZ / 2)) / USER_HZ);
773 #endif
776 u64 jiffies64_to_nsecs(u64 j)
778 #if !(NSEC_PER_SEC % HZ)
779 return (NSEC_PER_SEC / HZ) * j;
780 # else
781 return div_u64(j * HZ_TO_NSEC_NUM, HZ_TO_NSEC_DEN);
782 #endif
784 EXPORT_SYMBOL(jiffies64_to_nsecs);
787 * nsecs_to_jiffies64 - Convert nsecs in u64 to jiffies64
789 * @n: nsecs in u64
791 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
792 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
793 * for scheduler, not for use in device drivers to calculate timeout value.
795 * note:
796 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
797 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
799 u64 nsecs_to_jiffies64(u64 n)
801 #if (NSEC_PER_SEC % HZ) == 0
802 /* Common case, HZ = 100, 128, 200, 250, 256, 500, 512, 1000 etc. */
803 return div_u64(n, NSEC_PER_SEC / HZ);
804 #elif (HZ % 512) == 0
805 /* overflow after 292 years if HZ = 1024 */
806 return div_u64(n * HZ / 512, NSEC_PER_SEC / 512);
807 #else
809 * Generic case - optimized for cases where HZ is a multiple of 3.
810 * overflow after 64.99 years, exact for HZ = 60, 72, 90, 120 etc.
812 return div_u64(n * 9, (9ull * NSEC_PER_SEC + HZ / 2) / HZ);
813 #endif
815 EXPORT_SYMBOL(nsecs_to_jiffies64);
818 * nsecs_to_jiffies - Convert nsecs in u64 to jiffies
820 * @n: nsecs in u64
822 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
823 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
824 * for scheduler, not for use in device drivers to calculate timeout value.
826 * note:
827 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
828 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
830 unsigned long nsecs_to_jiffies(u64 n)
832 return (unsigned long)nsecs_to_jiffies64(n);
834 EXPORT_SYMBOL_GPL(nsecs_to_jiffies);
837 * Add two timespec64 values and do a safety check for overflow.
838 * It's assumed that both values are valid (>= 0).
839 * And, each timespec64 is in normalized form.
841 struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
842 const struct timespec64 rhs)
844 struct timespec64 res;
846 set_normalized_timespec64(&res, (timeu64_t) lhs.tv_sec + rhs.tv_sec,
847 lhs.tv_nsec + rhs.tv_nsec);
849 if (unlikely(res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)) {
850 res.tv_sec = TIME64_MAX;
851 res.tv_nsec = 0;
854 return res;
857 int get_timespec64(struct timespec64 *ts,
858 const struct __kernel_timespec __user *uts)
860 struct __kernel_timespec kts;
861 int ret;
863 ret = copy_from_user(&kts, uts, sizeof(kts));
864 if (ret)
865 return -EFAULT;
867 ts->tv_sec = kts.tv_sec;
869 /* Zero out the padding for 32 bit systems or in compat mode */
870 if (IS_ENABLED(CONFIG_64BIT_TIME) && in_compat_syscall())
871 kts.tv_nsec &= 0xFFFFFFFFUL;
873 ts->tv_nsec = kts.tv_nsec;
875 return 0;
877 EXPORT_SYMBOL_GPL(get_timespec64);
879 int put_timespec64(const struct timespec64 *ts,
880 struct __kernel_timespec __user *uts)
882 struct __kernel_timespec kts = {
883 .tv_sec = ts->tv_sec,
884 .tv_nsec = ts->tv_nsec
887 return copy_to_user(uts, &kts, sizeof(kts)) ? -EFAULT : 0;
889 EXPORT_SYMBOL_GPL(put_timespec64);
891 static int __get_old_timespec32(struct timespec64 *ts64,
892 const struct old_timespec32 __user *cts)
894 struct old_timespec32 ts;
895 int ret;
897 ret = copy_from_user(&ts, cts, sizeof(ts));
898 if (ret)
899 return -EFAULT;
901 ts64->tv_sec = ts.tv_sec;
902 ts64->tv_nsec = ts.tv_nsec;
904 return 0;
907 static int __put_old_timespec32(const struct timespec64 *ts64,
908 struct old_timespec32 __user *cts)
910 struct old_timespec32 ts = {
911 .tv_sec = ts64->tv_sec,
912 .tv_nsec = ts64->tv_nsec
914 return copy_to_user(cts, &ts, sizeof(ts)) ? -EFAULT : 0;
917 int get_old_timespec32(struct timespec64 *ts, const void __user *uts)
919 if (COMPAT_USE_64BIT_TIME)
920 return copy_from_user(ts, uts, sizeof(*ts)) ? -EFAULT : 0;
921 else
922 return __get_old_timespec32(ts, uts);
924 EXPORT_SYMBOL_GPL(get_old_timespec32);
926 int put_old_timespec32(const struct timespec64 *ts, void __user *uts)
928 if (COMPAT_USE_64BIT_TIME)
929 return copy_to_user(uts, ts, sizeof(*ts)) ? -EFAULT : 0;
930 else
931 return __put_old_timespec32(ts, uts);
933 EXPORT_SYMBOL_GPL(put_old_timespec32);
935 int get_itimerspec64(struct itimerspec64 *it,
936 const struct __kernel_itimerspec __user *uit)
938 int ret;
940 ret = get_timespec64(&it->it_interval, &uit->it_interval);
941 if (ret)
942 return ret;
944 ret = get_timespec64(&it->it_value, &uit->it_value);
946 return ret;
948 EXPORT_SYMBOL_GPL(get_itimerspec64);
950 int put_itimerspec64(const struct itimerspec64 *it,
951 struct __kernel_itimerspec __user *uit)
953 int ret;
955 ret = put_timespec64(&it->it_interval, &uit->it_interval);
956 if (ret)
957 return ret;
959 ret = put_timespec64(&it->it_value, &uit->it_value);
961 return ret;
963 EXPORT_SYMBOL_GPL(put_itimerspec64);
965 int get_old_itimerspec32(struct itimerspec64 *its,
966 const struct old_itimerspec32 __user *uits)
969 if (__get_old_timespec32(&its->it_interval, &uits->it_interval) ||
970 __get_old_timespec32(&its->it_value, &uits->it_value))
971 return -EFAULT;
972 return 0;
974 EXPORT_SYMBOL_GPL(get_old_itimerspec32);
976 int put_old_itimerspec32(const struct itimerspec64 *its,
977 struct old_itimerspec32 __user *uits)
979 if (__put_old_timespec32(&its->it_interval, &uits->it_interval) ||
980 __put_old_timespec32(&its->it_value, &uits->it_value))
981 return -EFAULT;
982 return 0;
984 EXPORT_SYMBOL_GPL(put_old_itimerspec32);