Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / kernel / time / time.c
blob1b69caa87480e7615d44ef409b96c081f2d15395
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, __kernel_old_time_t __user *, tloc)
64 __kernel_old_time_t i = (__kernel_old_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, __kernel_old_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 __kernel_old_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_settod(tv))
175 return -EINVAL;
177 error = security_settime64(tv, tz);
178 if (error)
179 return error;
181 if (tz) {
182 /* Verify we're within 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 __kernel_old_timeval __user *, tv,
200 struct timezone __user *, tz)
202 struct timespec64 new_ts;
203 struct timezone new_tz;
205 if (tv) {
206 if (get_user(new_ts.tv_sec, &tv->tv_sec) ||
207 get_user(new_ts.tv_nsec, &tv->tv_usec))
208 return -EFAULT;
210 if (new_ts.tv_nsec > USEC_PER_SEC || new_ts.tv_nsec < 0)
211 return -EINVAL;
213 new_ts.tv_nsec *= NSEC_PER_USEC;
215 if (tz) {
216 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
217 return -EFAULT;
220 return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
223 #ifdef CONFIG_COMPAT
224 COMPAT_SYSCALL_DEFINE2(gettimeofday, struct old_timeval32 __user *, tv,
225 struct timezone __user *, tz)
227 if (tv) {
228 struct timespec64 ts;
230 ktime_get_real_ts64(&ts);
231 if (put_user(ts.tv_sec, &tv->tv_sec) ||
232 put_user(ts.tv_nsec / 1000, &tv->tv_usec))
233 return -EFAULT;
235 if (tz) {
236 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
237 return -EFAULT;
240 return 0;
243 COMPAT_SYSCALL_DEFINE2(settimeofday, struct old_timeval32 __user *, tv,
244 struct timezone __user *, tz)
246 struct timespec64 new_ts;
247 struct timezone new_tz;
249 if (tv) {
250 if (get_user(new_ts.tv_sec, &tv->tv_sec) ||
251 get_user(new_ts.tv_nsec, &tv->tv_usec))
252 return -EFAULT;
254 if (new_ts.tv_nsec > USEC_PER_SEC || new_ts.tv_nsec < 0)
255 return -EINVAL;
257 new_ts.tv_nsec *= NSEC_PER_USEC;
259 if (tz) {
260 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
261 return -EFAULT;
264 return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
266 #endif
268 #ifdef CONFIG_64BIT
269 SYSCALL_DEFINE1(adjtimex, struct __kernel_timex __user *, txc_p)
271 struct __kernel_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 __kernel_timex)))
279 return -EFAULT;
280 ret = do_adjtimex(&txc);
281 return copy_to_user(txc_p, &txc, sizeof(struct __kernel_timex)) ? -EFAULT : ret;
283 #endif
285 #ifdef CONFIG_COMPAT_32BIT_TIME
286 int get_old_timex32(struct __kernel_timex *txc, const struct old_timex32 __user *utp)
288 struct old_timex32 tx32;
290 memset(txc, 0, sizeof(struct __kernel_timex));
291 if (copy_from_user(&tx32, utp, sizeof(struct old_timex32)))
292 return -EFAULT;
294 txc->modes = tx32.modes;
295 txc->offset = tx32.offset;
296 txc->freq = tx32.freq;
297 txc->maxerror = tx32.maxerror;
298 txc->esterror = tx32.esterror;
299 txc->status = tx32.status;
300 txc->constant = tx32.constant;
301 txc->precision = tx32.precision;
302 txc->tolerance = tx32.tolerance;
303 txc->time.tv_sec = tx32.time.tv_sec;
304 txc->time.tv_usec = tx32.time.tv_usec;
305 txc->tick = tx32.tick;
306 txc->ppsfreq = tx32.ppsfreq;
307 txc->jitter = tx32.jitter;
308 txc->shift = tx32.shift;
309 txc->stabil = tx32.stabil;
310 txc->jitcnt = tx32.jitcnt;
311 txc->calcnt = tx32.calcnt;
312 txc->errcnt = tx32.errcnt;
313 txc->stbcnt = tx32.stbcnt;
315 return 0;
318 int put_old_timex32(struct old_timex32 __user *utp, const struct __kernel_timex *txc)
320 struct old_timex32 tx32;
322 memset(&tx32, 0, sizeof(struct old_timex32));
323 tx32.modes = txc->modes;
324 tx32.offset = txc->offset;
325 tx32.freq = txc->freq;
326 tx32.maxerror = txc->maxerror;
327 tx32.esterror = txc->esterror;
328 tx32.status = txc->status;
329 tx32.constant = txc->constant;
330 tx32.precision = txc->precision;
331 tx32.tolerance = txc->tolerance;
332 tx32.time.tv_sec = txc->time.tv_sec;
333 tx32.time.tv_usec = txc->time.tv_usec;
334 tx32.tick = txc->tick;
335 tx32.ppsfreq = txc->ppsfreq;
336 tx32.jitter = txc->jitter;
337 tx32.shift = txc->shift;
338 tx32.stabil = txc->stabil;
339 tx32.jitcnt = txc->jitcnt;
340 tx32.calcnt = txc->calcnt;
341 tx32.errcnt = txc->errcnt;
342 tx32.stbcnt = txc->stbcnt;
343 tx32.tai = txc->tai;
344 if (copy_to_user(utp, &tx32, sizeof(struct old_timex32)))
345 return -EFAULT;
346 return 0;
349 SYSCALL_DEFINE1(adjtimex_time32, struct old_timex32 __user *, utp)
351 struct __kernel_timex txc;
352 int err, ret;
354 err = get_old_timex32(&txc, utp);
355 if (err)
356 return err;
358 ret = do_adjtimex(&txc);
360 err = put_old_timex32(utp, &txc);
361 if (err)
362 return err;
364 return ret;
366 #endif
369 * jiffies_to_msecs - Convert jiffies to milliseconds
370 * @j: jiffies value
372 * Avoid unnecessary multiplications/divisions in the
373 * two most common HZ cases.
375 * Return: milliseconds value
377 unsigned int jiffies_to_msecs(const unsigned long j)
379 #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
380 return (MSEC_PER_SEC / HZ) * j;
381 #elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
382 return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
383 #else
384 # if BITS_PER_LONG == 32
385 return (HZ_TO_MSEC_MUL32 * j + (1ULL << HZ_TO_MSEC_SHR32) - 1) >>
386 HZ_TO_MSEC_SHR32;
387 # else
388 return DIV_ROUND_UP(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
389 # endif
390 #endif
392 EXPORT_SYMBOL(jiffies_to_msecs);
395 * jiffies_to_usecs - Convert jiffies to microseconds
396 * @j: jiffies value
398 * Return: microseconds value
400 unsigned int jiffies_to_usecs(const unsigned long j)
403 * Hz usually doesn't go much further MSEC_PER_SEC.
404 * jiffies_to_usecs() and usecs_to_jiffies() depend on that.
406 BUILD_BUG_ON(HZ > USEC_PER_SEC);
408 #if !(USEC_PER_SEC % HZ)
409 return (USEC_PER_SEC / HZ) * j;
410 #else
411 # if BITS_PER_LONG == 32
412 return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32;
413 # else
414 return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN;
415 # endif
416 #endif
418 EXPORT_SYMBOL(jiffies_to_usecs);
421 * mktime64 - Converts date to seconds.
422 * @year0: year to convert
423 * @mon0: month to convert
424 * @day: day to convert
425 * @hour: hour to convert
426 * @min: minute to convert
427 * @sec: second to convert
429 * Converts Gregorian date to seconds since 1970-01-01 00:00:00.
430 * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
431 * => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
433 * [For the Julian calendar (which was used in Russia before 1917,
434 * Britain & colonies before 1752, anywhere else before 1582,
435 * and is still in use by some communities) leave out the
436 * -year/100+year/400 terms, and add 10.]
438 * This algorithm was first published by Gauss (I think).
440 * A leap second can be indicated by calling this function with sec as
441 * 60 (allowable under ISO 8601). The leap second is treated the same
442 * as the following second since they don't exist in UNIX time.
444 * An encoding of midnight at the end of the day as 24:00:00 - ie. midnight
445 * tomorrow - (allowable under ISO 8601) is supported.
447 * Return: seconds since the epoch time for the given input date
449 time64_t mktime64(const unsigned int year0, const unsigned int mon0,
450 const unsigned int day, const unsigned int hour,
451 const unsigned int min, const unsigned int sec)
453 unsigned int mon = mon0, year = year0;
455 /* 1..12 -> 11,12,1..10 */
456 if (0 >= (int) (mon -= 2)) {
457 mon += 12; /* Puts Feb last since it has leap day */
458 year -= 1;
461 return ((((time64_t)
462 (year/4 - year/100 + year/400 + 367*mon/12 + day) +
463 year*365 - 719499
464 )*24 + hour /* now have hours - midnight tomorrow handled here */
465 )*60 + min /* now have minutes */
466 )*60 + sec; /* finally seconds */
468 EXPORT_SYMBOL(mktime64);
470 struct __kernel_old_timeval ns_to_kernel_old_timeval(s64 nsec)
472 struct timespec64 ts = ns_to_timespec64(nsec);
473 struct __kernel_old_timeval tv;
475 tv.tv_sec = ts.tv_sec;
476 tv.tv_usec = (suseconds_t)ts.tv_nsec / 1000;
478 return tv;
480 EXPORT_SYMBOL(ns_to_kernel_old_timeval);
483 * set_normalized_timespec64 - set timespec sec and nsec parts and normalize
485 * @ts: pointer to timespec variable to be set
486 * @sec: seconds to set
487 * @nsec: nanoseconds to set
489 * Set seconds and nanoseconds field of a timespec variable and
490 * normalize to the timespec storage format
492 * Note: The tv_nsec part is always in the range of 0 <= tv_nsec < NSEC_PER_SEC.
493 * For negative values only the tv_sec field is negative !
495 void set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 nsec)
497 while (nsec >= NSEC_PER_SEC) {
499 * The following asm() prevents the compiler from
500 * optimising this loop into a modulo operation. See
501 * also __iter_div_u64_rem() in include/linux/time.h
503 asm("" : "+rm"(nsec));
504 nsec -= NSEC_PER_SEC;
505 ++sec;
507 while (nsec < 0) {
508 asm("" : "+rm"(nsec));
509 nsec += NSEC_PER_SEC;
510 --sec;
512 ts->tv_sec = sec;
513 ts->tv_nsec = nsec;
515 EXPORT_SYMBOL(set_normalized_timespec64);
518 * ns_to_timespec64 - Convert nanoseconds to timespec64
519 * @nsec: the nanoseconds value to be converted
521 * Return: the timespec64 representation of the nsec parameter.
523 struct timespec64 ns_to_timespec64(s64 nsec)
525 struct timespec64 ts = { 0, 0 };
526 s32 rem;
528 if (likely(nsec > 0)) {
529 ts.tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem);
530 ts.tv_nsec = rem;
531 } else if (nsec < 0) {
533 * With negative times, tv_sec points to the earlier
534 * second, and tv_nsec counts the nanoseconds since
535 * then, so tv_nsec is always a positive number.
537 ts.tv_sec = -div_u64_rem(-nsec - 1, NSEC_PER_SEC, &rem) - 1;
538 ts.tv_nsec = NSEC_PER_SEC - rem - 1;
541 return ts;
543 EXPORT_SYMBOL(ns_to_timespec64);
546 * __msecs_to_jiffies: - convert milliseconds to jiffies
547 * @m: time in milliseconds
549 * conversion is done as follows:
551 * - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
553 * - 'too large' values [that would result in larger than
554 * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
556 * - all other values are converted to jiffies by either multiplying
557 * the input value by a factor or dividing it with a factor and
558 * handling any 32-bit overflows.
559 * for the details see _msecs_to_jiffies()
561 * msecs_to_jiffies() checks for the passed in value being a constant
562 * via __builtin_constant_p() allowing gcc to eliminate most of the
563 * code, __msecs_to_jiffies() is called if the value passed does not
564 * allow constant folding and the actual conversion must be done at
565 * runtime.
566 * The _msecs_to_jiffies helpers are the HZ dependent conversion
567 * routines found in include/linux/jiffies.h
569 * Return: jiffies value
571 unsigned long __msecs_to_jiffies(const unsigned int m)
574 * Negative value, means infinite timeout:
576 if ((int)m < 0)
577 return MAX_JIFFY_OFFSET;
578 return _msecs_to_jiffies(m);
580 EXPORT_SYMBOL(__msecs_to_jiffies);
583 * __usecs_to_jiffies: - convert microseconds to jiffies
584 * @u: time in milliseconds
586 * Return: jiffies value
588 unsigned long __usecs_to_jiffies(const unsigned int u)
590 if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
591 return MAX_JIFFY_OFFSET;
592 return _usecs_to_jiffies(u);
594 EXPORT_SYMBOL(__usecs_to_jiffies);
597 * timespec64_to_jiffies - convert a timespec64 value to jiffies
598 * @value: pointer to &struct timespec64
600 * The TICK_NSEC - 1 rounds up the value to the next resolution. Note
601 * that a remainder subtract here would not do the right thing as the
602 * resolution values don't fall on second boundaries. I.e. the line:
603 * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding.
604 * Note that due to the small error in the multiplier here, this
605 * rounding is incorrect for sufficiently large values of tv_nsec, but
606 * well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're
607 * OK.
609 * Rather, we just shift the bits off the right.
611 * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec
612 * value to a scaled second value.
614 * Return: jiffies value
616 unsigned long
617 timespec64_to_jiffies(const struct timespec64 *value)
619 u64 sec = value->tv_sec;
620 long nsec = value->tv_nsec + TICK_NSEC - 1;
622 if (sec >= MAX_SEC_IN_JIFFIES){
623 sec = MAX_SEC_IN_JIFFIES;
624 nsec = 0;
626 return ((sec * SEC_CONVERSION) +
627 (((u64)nsec * NSEC_CONVERSION) >>
628 (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC;
631 EXPORT_SYMBOL(timespec64_to_jiffies);
634 * jiffies_to_timespec64 - convert jiffies value to &struct timespec64
635 * @jiffies: jiffies value
636 * @value: pointer to &struct timespec64
638 void
639 jiffies_to_timespec64(const unsigned long jiffies, struct timespec64 *value)
642 * Convert jiffies to nanoseconds and separate with
643 * one divide.
645 u32 rem;
646 value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
647 NSEC_PER_SEC, &rem);
648 value->tv_nsec = rem;
650 EXPORT_SYMBOL(jiffies_to_timespec64);
653 * Convert jiffies/jiffies_64 to clock_t and back.
657 * jiffies_to_clock_t - Convert jiffies to clock_t
658 * @x: jiffies value
660 * Return: jiffies converted to clock_t (CLOCKS_PER_SEC)
662 clock_t jiffies_to_clock_t(unsigned long x)
664 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
665 # if HZ < USER_HZ
666 return x * (USER_HZ / HZ);
667 # else
668 return x / (HZ / USER_HZ);
669 # endif
670 #else
671 return div_u64((u64)x * TICK_NSEC, NSEC_PER_SEC / USER_HZ);
672 #endif
674 EXPORT_SYMBOL(jiffies_to_clock_t);
677 * clock_t_to_jiffies - Convert clock_t to jiffies
678 * @x: clock_t value
680 * Return: clock_t value converted to jiffies
682 unsigned long clock_t_to_jiffies(unsigned long x)
684 #if (HZ % USER_HZ)==0
685 if (x >= ~0UL / (HZ / USER_HZ))
686 return ~0UL;
687 return x * (HZ / USER_HZ);
688 #else
689 /* Don't worry about loss of precision here .. */
690 if (x >= ~0UL / HZ * USER_HZ)
691 return ~0UL;
693 /* .. but do try to contain it here */
694 return div_u64((u64)x * HZ, USER_HZ);
695 #endif
697 EXPORT_SYMBOL(clock_t_to_jiffies);
700 * jiffies_64_to_clock_t - Convert jiffies_64 to clock_t
701 * @x: jiffies_64 value
703 * Return: jiffies_64 value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)
705 u64 jiffies_64_to_clock_t(u64 x)
707 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
708 # if HZ < USER_HZ
709 x = div_u64(x * USER_HZ, HZ);
710 # elif HZ > USER_HZ
711 x = div_u64(x, HZ / USER_HZ);
712 # else
713 /* Nothing to do */
714 # endif
715 #else
717 * There are better ways that don't overflow early,
718 * but even this doesn't overflow in hundreds of years
719 * in 64 bits, so..
721 x = div_u64(x * TICK_NSEC, (NSEC_PER_SEC / USER_HZ));
722 #endif
723 return x;
725 EXPORT_SYMBOL(jiffies_64_to_clock_t);
728 * nsec_to_clock_t - Convert nsec value to clock_t
729 * @x: nsec value
731 * Return: nsec value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)
733 u64 nsec_to_clock_t(u64 x)
735 #if (NSEC_PER_SEC % USER_HZ) == 0
736 return div_u64(x, NSEC_PER_SEC / USER_HZ);
737 #elif (USER_HZ % 512) == 0
738 return div_u64(x * USER_HZ / 512, NSEC_PER_SEC / 512);
739 #else
741 * max relative error 5.7e-8 (1.8s per year) for USER_HZ <= 1024,
742 * overflow after 64.99 years.
743 * exact for HZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
745 return div_u64(x * 9, (9ull * NSEC_PER_SEC + (USER_HZ / 2)) / USER_HZ);
746 #endif
750 * jiffies64_to_nsecs - Convert jiffies64 to nanoseconds
751 * @j: jiffies64 value
753 * Return: nanoseconds value
755 u64 jiffies64_to_nsecs(u64 j)
757 #if !(NSEC_PER_SEC % HZ)
758 return (NSEC_PER_SEC / HZ) * j;
759 # else
760 return div_u64(j * HZ_TO_NSEC_NUM, HZ_TO_NSEC_DEN);
761 #endif
763 EXPORT_SYMBOL(jiffies64_to_nsecs);
766 * jiffies64_to_msecs - Convert jiffies64 to milliseconds
767 * @j: jiffies64 value
769 * Return: milliseconds value
771 u64 jiffies64_to_msecs(const u64 j)
773 #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
774 return (MSEC_PER_SEC / HZ) * j;
775 #else
776 return div_u64(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
777 #endif
779 EXPORT_SYMBOL(jiffies64_to_msecs);
782 * nsecs_to_jiffies64 - Convert nsecs in u64 to jiffies64
784 * @n: nsecs in u64
786 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
787 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
788 * for scheduler, not for use in device drivers to calculate timeout value.
790 * note:
791 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
792 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
794 * Return: nsecs converted to jiffies64 value
796 u64 nsecs_to_jiffies64(u64 n)
798 #if (NSEC_PER_SEC % HZ) == 0
799 /* Common case, HZ = 100, 128, 200, 250, 256, 500, 512, 1000 etc. */
800 return div_u64(n, NSEC_PER_SEC / HZ);
801 #elif (HZ % 512) == 0
802 /* overflow after 292 years if HZ = 1024 */
803 return div_u64(n * HZ / 512, NSEC_PER_SEC / 512);
804 #else
806 * Generic case - optimized for cases where HZ is a multiple of 3.
807 * overflow after 64.99 years, exact for HZ = 60, 72, 90, 120 etc.
809 return div_u64(n * 9, (9ull * NSEC_PER_SEC + HZ / 2) / HZ);
810 #endif
812 EXPORT_SYMBOL(nsecs_to_jiffies64);
815 * nsecs_to_jiffies - Convert nsecs in u64 to jiffies
817 * @n: nsecs in u64
819 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
820 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
821 * for scheduler, not for use in device drivers to calculate timeout value.
823 * note:
824 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
825 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
827 * Return: nsecs converted to jiffies value
829 unsigned long nsecs_to_jiffies(u64 n)
831 return (unsigned long)nsecs_to_jiffies64(n);
833 EXPORT_SYMBOL_GPL(nsecs_to_jiffies);
836 * timespec64_add_safe - Add two timespec64 values and do a safety check
837 * for overflow.
838 * @lhs: first (left) timespec64 to add
839 * @rhs: second (right) timespec64 to add
841 * It's assumed that both values are valid (>= 0).
842 * And, each timespec64 is in normalized form.
844 * Return: sum of @lhs + @rhs
846 struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
847 const struct timespec64 rhs)
849 struct timespec64 res;
851 set_normalized_timespec64(&res, (timeu64_t) lhs.tv_sec + rhs.tv_sec,
852 lhs.tv_nsec + rhs.tv_nsec);
854 if (unlikely(res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)) {
855 res.tv_sec = TIME64_MAX;
856 res.tv_nsec = 0;
859 return res;
863 * get_timespec64 - get user's time value into kernel space
864 * @ts: destination &struct timespec64
865 * @uts: user's time value as &struct __kernel_timespec
867 * Handles compat or 32-bit modes.
869 * Return: 0 on success or negative errno on error
871 int get_timespec64(struct timespec64 *ts,
872 const struct __kernel_timespec __user *uts)
874 struct __kernel_timespec kts;
875 int ret;
877 ret = copy_from_user(&kts, uts, sizeof(kts));
878 if (ret)
879 return -EFAULT;
881 ts->tv_sec = kts.tv_sec;
883 /* Zero out the padding in compat mode */
884 if (in_compat_syscall())
885 kts.tv_nsec &= 0xFFFFFFFFUL;
887 /* In 32-bit mode, this drops the padding */
888 ts->tv_nsec = kts.tv_nsec;
890 return 0;
892 EXPORT_SYMBOL_GPL(get_timespec64);
895 * put_timespec64 - convert timespec64 value to __kernel_timespec format and
896 * copy the latter to userspace
897 * @ts: input &struct timespec64
898 * @uts: user's &struct __kernel_timespec
900 * Return: 0 on success or negative errno on error
902 int put_timespec64(const struct timespec64 *ts,
903 struct __kernel_timespec __user *uts)
905 struct __kernel_timespec kts = {
906 .tv_sec = ts->tv_sec,
907 .tv_nsec = ts->tv_nsec
910 return copy_to_user(uts, &kts, sizeof(kts)) ? -EFAULT : 0;
912 EXPORT_SYMBOL_GPL(put_timespec64);
914 static int __get_old_timespec32(struct timespec64 *ts64,
915 const struct old_timespec32 __user *cts)
917 struct old_timespec32 ts;
918 int ret;
920 ret = copy_from_user(&ts, cts, sizeof(ts));
921 if (ret)
922 return -EFAULT;
924 ts64->tv_sec = ts.tv_sec;
925 ts64->tv_nsec = ts.tv_nsec;
927 return 0;
930 static int __put_old_timespec32(const struct timespec64 *ts64,
931 struct old_timespec32 __user *cts)
933 struct old_timespec32 ts = {
934 .tv_sec = ts64->tv_sec,
935 .tv_nsec = ts64->tv_nsec
937 return copy_to_user(cts, &ts, sizeof(ts)) ? -EFAULT : 0;
941 * get_old_timespec32 - get user's old-format time value into kernel space
942 * @ts: destination &struct timespec64
943 * @uts: user's old-format time value (&struct old_timespec32)
945 * Handles X86_X32_ABI compatibility conversion.
947 * Return: 0 on success or negative errno on error
949 int get_old_timespec32(struct timespec64 *ts, const void __user *uts)
951 if (COMPAT_USE_64BIT_TIME)
952 return copy_from_user(ts, uts, sizeof(*ts)) ? -EFAULT : 0;
953 else
954 return __get_old_timespec32(ts, uts);
956 EXPORT_SYMBOL_GPL(get_old_timespec32);
959 * put_old_timespec32 - convert timespec64 value to &struct old_timespec32 and
960 * copy the latter to userspace
961 * @ts: input &struct timespec64
962 * @uts: user's &struct old_timespec32
964 * Handles X86_X32_ABI compatibility conversion.
966 * Return: 0 on success or negative errno on error
968 int put_old_timespec32(const struct timespec64 *ts, void __user *uts)
970 if (COMPAT_USE_64BIT_TIME)
971 return copy_to_user(uts, ts, sizeof(*ts)) ? -EFAULT : 0;
972 else
973 return __put_old_timespec32(ts, uts);
975 EXPORT_SYMBOL_GPL(put_old_timespec32);
978 * get_itimerspec64 - get user's &struct __kernel_itimerspec into kernel space
979 * @it: destination &struct itimerspec64
980 * @uit: user's &struct __kernel_itimerspec
982 * Return: 0 on success or negative errno on error
984 int get_itimerspec64(struct itimerspec64 *it,
985 const struct __kernel_itimerspec __user *uit)
987 int ret;
989 ret = get_timespec64(&it->it_interval, &uit->it_interval);
990 if (ret)
991 return ret;
993 ret = get_timespec64(&it->it_value, &uit->it_value);
995 return ret;
997 EXPORT_SYMBOL_GPL(get_itimerspec64);
1000 * put_itimerspec64 - convert &struct itimerspec64 to __kernel_itimerspec format
1001 * and copy the latter to userspace
1002 * @it: input &struct itimerspec64
1003 * @uit: user's &struct __kernel_itimerspec
1005 * Return: 0 on success or negative errno on error
1007 int put_itimerspec64(const struct itimerspec64 *it,
1008 struct __kernel_itimerspec __user *uit)
1010 int ret;
1012 ret = put_timespec64(&it->it_interval, &uit->it_interval);
1013 if (ret)
1014 return ret;
1016 ret = put_timespec64(&it->it_value, &uit->it_value);
1018 return ret;
1020 EXPORT_SYMBOL_GPL(put_itimerspec64);
1023 * get_old_itimerspec32 - get user's &struct old_itimerspec32 into kernel space
1024 * @its: destination &struct itimerspec64
1025 * @uits: user's &struct old_itimerspec32
1027 * Return: 0 on success or negative errno on error
1029 int get_old_itimerspec32(struct itimerspec64 *its,
1030 const struct old_itimerspec32 __user *uits)
1033 if (__get_old_timespec32(&its->it_interval, &uits->it_interval) ||
1034 __get_old_timespec32(&its->it_value, &uits->it_value))
1035 return -EFAULT;
1036 return 0;
1038 EXPORT_SYMBOL_GPL(get_old_itimerspec32);
1041 * put_old_itimerspec32 - convert &struct itimerspec64 to &struct
1042 * old_itimerspec32 and copy the latter to userspace
1043 * @its: input &struct itimerspec64
1044 * @uits: user's &struct old_itimerspec32
1046 * Return: 0 on success or negative errno on error
1048 int put_old_itimerspec32(const struct itimerspec64 *its,
1049 struct old_itimerspec32 __user *uits)
1051 if (__put_old_timespec32(&its->it_interval, &uits->it_interval) ||
1052 __put_old_timespec32(&its->it_value, &uits->it_value))
1053 return -EFAULT;
1054 return 0;
1056 EXPORT_SYMBOL_GPL(put_old_itimerspec32);